Proxy tikrintuvas nustato SendTimeout = 200, iškviečia Connect ir laukia daug ilgiau nei tikėtasi. Timeout yra susietas su operacija, kurios tikrintuvas dar nepasiekė.

Socket.SendTimeout valdo sinchroninius siuntimus. Jis nesuteikia sinchroniniam prisijungimo bandymui 200 ms termino. Miego pridėjimas prieš Connect prideda tik dar vieną vėlavimą.

Atšaukite laukiančią operaciją

Šiuolaikiniame .NET taikinyje, siūlančiame atšaukiamą overload, asinchroninė patikra gali pritaikyti savo biudžetą ryšiui užmegzti:

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

Fragmentas priklauso async metodui, o proxy hostą ir prievadą pateikia iškvietėjas; viešas kandidatas iš proxy sąrašo gali pateikti šiuos du įvestis. Atšaukimą apdorokite atskirai nuo socket klaidos, jei tikrintuvas nurodo nesėkmės priežastis. Kliento atlaisvinimas taip pat neleidžia užbaigtoms patikroms kaupti socketų.

Senas .NET Framework kodas neturi visų šiuolaikinių overload. Naudokite palaikomą asinchroninę ryšio tvarką ir aiškiai uždarykite socket, kai atsisakote bandymo. Vien savo laukimo sustabdymas neįrodo, kad pagrindinė operacija sustojo.

Žalias rezultatas vis dar mažas rezultatas

Sėkmingas TCP ryšys įrodo, kad šis klientas pasiekė klausantį galinį tašką. Jis nesuderino SOCKS, nesitvirtino HTTP proxy serveryje, neatidarė CONNECT ir negavo norimo svetainės atsakymo.

Suteikite tiems vėlesniems etapams savo ribotą apdorojimą arba per juos perkelkite sąmoningą bendrą terminą. Priešingu atveju sutaisytas ryšio laikmatis gali veikti nepriekaištingai, kol tikrintuvas praleidžia dar minutę laukdamas proxy handshake.

Susiję straipsniai