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

Socket.SendTimeout kontrolira sinkrona slanja. Ne daje sinkronom 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, asinkrona provjera može primijeniti svoj proračun na uspostavljanje veze:

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

Ulomak pripada async metodi, a host i port proxyja daje pozivatelj; javni kandidat s popisa proxyja može dati ta dva ulaza. Otkazivanje obrađujte odvojeno od pogreš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 asinkroni 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 i dalje je mali rezultat

Uspješna TCP veza dokazuje da je ovaj klijent stigao do krajnje točke koja sluša. Ona nije pregovarala SOCKS, nije se autentificirala 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 timer veze može raditi savršeno dok provjerivač troši još jednu minutu čekajući proxy handshake.

Povezani članci