Kontrola proxy nastaví SendTimeout = 200, zavolá Connect a čeká mnohem déle, než se očekávalo. Timeout je navázán na operaci, ke které kontrola ještě nedospěla.

Socket.SendTimeout řídí synchronní odesílání. Nedává synchronnímu pokusu o připojení lhůtu 200 ms. Přidání spánku před Connect přidá jen další zpoždění.

Zrušte operaci, která čeká

Na moderním cíli .NET, který nabízí zrušitelný overload, může asynchronní test uplatnit svůj rozpočet na navázání spojení:

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

Fragment patří do asynchronní metody, hostitele a port proxy dodává volající; veřejný kandidát ze seznamu proxy může dodat tyto dva vstupy. Zrušení zpracujte odděleně od chyby socketu, pokud kontrola uvádí důvody selhání. Uvolnění klienta také brání tomu, aby dokončené testy hromadily sockety.

Starší kód .NET Framework nemá všechny moderní overloady. Použijte podporované asynchronní uspořádání spojení a při opuštění pokusu socket výslovně zavřete. Pouhé zastavení vašeho čekání nedokazuje, že se podkladová operace zastavila.

Zelený výsledek je stále malý výsledek

Úspěšné TCP spojení dokazuje, že tento klient dosáhl naslouchajícího koncového bodu. Nevyjednalo SOCKS, neautentizovalo se u HTTP proxy, neotevřelo CONNECT ani nepřijalo požadovanou odpověď webu.

Dejte těmto pozdějším fázím vlastní omezené zpracování, nebo jimi proveďte zamýšlenou celkovou lhůtu. Jinak může opravený časovač spojení fungovat dokonale, zatímco kontrola stráví další minutu čekáním na proxy handshake.

Související články