Preverjevalnik proxy nastavi SendTimeout = 200, pokliče Connect in čaka veliko dlje, kot je bilo pričakovano. Timeout je vezan na operacijo, do katere preverjevalnik še ni prišel.

Socket.SendTimeout nadzoruje sinhrone pošiljanja. Sinhronemu poskusu povezave ne daje roka 200 ms. Dodajanje spanja pred Connect doda le še eno zamudo.

Prekličite operacijo, ki čaka

Na sodobnem cilju .NET, ki ponuja preklicljivo preobremenitev, lahko asinhrono preverjanje uporabi svoj proračun za vzpostavitev povezave:

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

Odrezek sodi v async metodo, gostitelja in vrata proxy poda klicatelj; javni kandidat s seznama proxy lahko poda ta dva vhoda. Preklic obravnavajte ločeno od napake vtičnice, če preverjevalnik navaja razloge za neuspeh. Sprostitev odjemalca tudi prepreči, da bi končana preverjanja kopičila vtičnice.

Starejša koda .NET Framework nima vseh sodobnih preobremenitev. Uporabite podprto asinhrono ureditev povezave in pri opustitvi poskusa vtičnico izrecno zaprite. Samo ustavitev vašega čakanja ne dokazuje, da se je osnovna operacija ustavila.

Zeleni rezultat je še vedno majhen rezultat

Uspešna povezava TCP dokazuje, da je ta odjemalec dosegel poslušajočo končno točko. Ni se pogajala o SOCKS, ni se overila pri proxyju HTTP, ni odprla CONNECT niti prejela želenega odgovora spletnega mesta.

Tem poznejšim stopnjam dajte lastno omejeno obravnavo ali skoznje speljite namerni skupni rok. Sicer lahko popravljeni časovnik povezave deluje brezhibno, medtem ko preverjevalnik porabi še eno minuto za čakanje na rokovanje proxy.

Sorodni članki