Socket.SendTimeout ප්රොක්සි සම්බන්ධතා උත්සාහය සීමා නොකරයි
දත්ත යැවීමට පමණක් අදාළ වන timeout එකක් සැකසීම වෙනුවට සම්බන්ධතාවය ස්ථාපිත කිරීමේදී ප්රොක්සි පෝට් පරීක්ෂාව සීමා කරන්න.
ප්රොක්සි පරීක්ෂකය SendTimeout = 200 සකසයි, Connect අමතයි සහ බලාපොරොත්තු වූවාට වඩා බොහෝ කල් රැඳී සිටී. timeout එක පරීක්ෂකය තවම නොපැමිණි මෙහෙයුමකට බැඳී ඇත.
Socket.SendTimeout සමකාලීන යැවීම් පාලනය කරයි. එය සමකාලීන සම්බන්ධතා උත්සාහයකට 200 ms කාල සීමාවක් ලබා නොදේ. Connect ට පෙර නින්දක් එකතු කිරීම තවත් ප්රමාදයක් පමණක් එකතු කරයි.
රැඳී සිටින මෙහෙයුම අවලංගු කරන්න
අවලංගු කළ හැකි overload ලබා දෙන නවීන .NET ඉලක්කයක, async පරීක්ෂාවකට එහි අයවැය සම්බන්ධතාවය ස්ථාපිත කිරීමට යෙදිය හැක:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);
මෙම කොටස async ක්රමයකට අයත් වන අතර ප්රොක්සි සත්කාරකය සහ පෝට් එක අමතන්නා විසින් සපයයි; ප්රොක්සි ලැයිස්තුවකින් පොදු අපේක්ෂකයෙකුට එම ආදාන දෙක සැපයිය හැක. පරීක්ෂකය අසාර්ථක වීමේ හේතු වාර්තා කරන්නේ නම් අවලංගු කිරීම socket දෝෂයෙන් වෙන් කර හසුරුවන්න. client එක dispose කිරීම අවසන් වූ පරීක්ෂාවන් socket එකතු කිරීමද වළක්වයි.
පැරණි .NET Framework කේතයට සියලු නවීන overload නොමැත. ආධාරක async සම්බන්ධතා සැකැස්මක් භාවිත කර උත්සාහය අත්හරින විට socket එක පැහැදිලිව වසන්න. ඔබේ රැඳී සිටීම නැවැත්වීම පමණක් යටින් පවතින මෙහෙයුම නැවතුණු බව ඔප්පු නොකරයි.
කොළ ප්රතිඵලය තවමත් කුඩා ප්රතිඵලයකි
සාර්ථක TCP සම්බන්ධතාවයක් ඔප්පු කරන්නේ මෙම client එක ශ්රවණය කරන අන්ත ලක්ෂ්යයකට ළඟා වූ බවයි. එය SOCKS සාකච්ඡා කර නැත, HTTP ප්රොක්සියකට සත්යාපනය වී නැත, CONNECT විවෘත කර නැත හෝ අවශ්ය වෙබ් අඩවි ප්රතිචාරය ලබාගෙන නැත.
එම පසුව එන අදියරවලට ඔවුන්ගේම සීමිත හැසිරවීමක් දෙන්න, නැතහොත් ඒවා හරහා අභිප්රායික සමස්ත කාල සීමාවක් ගෙන යන්න. නැතහොත් අලුත්වැඩියා කළ සම්බන්ධතා ටයිමරය පරිපූර්ණ ලෙස ක්රියා කරන අතරතුර පරීක්ෂකය ප්රොක්සි handshake එකක් එනතුරු තවත් විනාඩියක් ගත කරයි.