Kikagua proksi huweka SendTimeout = 200, huita Connect na husubiri muda mrefu zaidi kuliko inavyotarajiwa. Muda huo umeambatanishwa na operesheni ambayo kikagua hakijafikia bado.

Socket.SendTimeout hudhibiti utumaji wa moja kwa moja. Haipi jaribio la muunganisho la moja kwa moja tarehe ya mwisho ya 200 ms. Kuongeza usingizi kabla ya Connect huongeza ucheleweshaji mwingine tu.

Ghairi operesheni inayosubiri

Kwenye lengo la kisasa la .NET linalotoa overload inayoweza kughairiwa, ukaguzi wa async unaweza kutumia bajeti yake kwenye uanzishaji wa muunganisho:

using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);

Kipande hiki ni cha mbinu ya async, huku mwenyeji na lango la proksi vikitolewa na anayeita; mgombea wa umma kutoka orodha ya proksi anaweza kutoa pembejeo hizo mbili. Shughulikia ughairishaji kando na hitilafu ya socket ikiwa kikagua kitaripoti sababu za kushindwa. Kuondoa mteja pia huzuia ukaguzi uliokamilika kukusanya socket.

Msimbo wa zamani wa .NET Framework hauna kila overload ya kisasa. Tumia mpangilio wa muunganisho wa async unaoungwa mkono na ufunge socket kwa uwazi unapoacha jaribio. Kusimamisha tu kusubiri kwako hakuthibitishi kuwa operesheni ya msingi imesimama.

Matokeo ya kijani bado ni matokeo madogo

Muunganisho wa TCP uliofaulu huthibitisha kuwa mteja huyu alifika kwenye kituo cha mwisho kinachosikiliza. Haukujadili SOCKS, haukujithibitisha kwa proksi ya HTTP, haukufungua CONNECT wala haukupokea jibu la tovuti linalotakiwa.

Wape hatua hizo za baadaye ushughulikiaji wao wenye mipaka, au pitisha tarehe ya mwisho ya jumla ya kusudi kupitia hizo. Vinginevyo kipima muda cha muunganisho kilichorekebishwa kinaweza kufanya kazi kikamilifu wakati kikagua kinatumia dakika nyingine kusubiri handshake ya proksi.

Makala zinazohusiana