Proxy provjerivač postavlja SendTimeout = 200, poziva Connect i čeka mnogo duže nego što se očekivalo. Timeout je vezan za operaciju do koje provjerivač još nije došao.

Socket.SendTimeout kontroliše sinhrona slanja. Ne daje sinhronom pokušaju veze rok od 200 ms. Dodavanje pauze prije Connect samo dodaje još jedno kašnjenje.

Otkažite operaciju koja čeka

Na modernoj .NET meti koja nudi overload koji se može otkazati, asinhrona provjera može primijeniti svoj budžet na uspostavljanje veze:

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

Fragment pripada async metodi, a host i port proxyja daje pozivalac; javni kandidat sa liste proxyja može dati ta dva ulaza. Otkazivanje obrađujte odvojeno od greške socketa ako provjerivač navodi razloge neuspjeha. Oslobađanje klijenta također sprječava da završene provjere gomilaju sockete.

Stariji .NET Framework kod nema svaki moderni overload. Koristite podržan asinhroni raspored veze i eksplicitno zatvorite socket kada napuštate pokušaj. Samo zaustavljanje vašeg čekanja ne dokazuje da se osnovna operacija zaustavila.

Zeleni rezultat je i dalje mali rezultat

Uspješna TCP veza dokazuje da je ovaj klijent stigao do krajnje tačke koja sluša. Ona nije pregovarala SOCKS, nije se autentifikovala na HTTP proxy, nije otvorila CONNECT niti primila željeni odgovor web stranice.

Dajte tim kasnijim fazama vlastito ograničeno rukovanje ili kroz njih provedite namjerni ukupni rok. Inače popravljeni tajmer veze može raditi savršeno dok provjerivač troši još jednu minutu čekajući proxy handshake.

Povezani članci