Socket.SendTimeout neomezuje pokus o připojení přes proxy
Omezte test portu proxy při navazování spojení, místo abyste nastavovali timeout, který platí jen pro odesílání dat.
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.