Proxy проверивач поставља SendTimeout = 200, позива Connect и чека много дуже него што се очекивало. Timeout је везан за операцију до које проверивач још није дошао.

Socket.SendTimeout контролише синхрона слања. Не даје синхроном покушају везе рок од 200 ms. Додавање паузе пре Connect само додаје још једно кашњење.

Откажите операцију која чека

На модерној .NET мети која нуди overload који се може отказати, асинхрона провера може применити свој буџет на успостављање везе:

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

Фрагмент припада async методи, а хост и порт proxy-ја даје позивалац; јавни кандидат са листе proxy-ја може дати та два улаза. Отказивање обрађујте одвојено од грешке socket-а ако проверивач наводи разлоге неуспеха. Ослобађање клијента такође спречава да завршене провере гомилају socket-е.

Старији .NET Framework код нема сваки модерни overload. Користите подржан асинхрони распоред везе и експлицитно затворите socket када напуштате покушај. Само заустављање вашег чекања не доказује да се основна операција зауставила.

Зелени резултат је и даље мали резултат

Успешна TCP веза доказује да је овај клијент стигао до крајње тачке која слуша. Она није преговарала SOCKS, није се аутентификовала на HTTP proxy, није отворила CONNECT нити примила жељени одговор сајта.

Дајте тим каснијим фазама сопствено ограничено руковање или кроз њих проведите намерни укупни рок. Иначе поправљени тајмер везе може радити савршено док проверивач троши још један минут чекајући proxy handshake.

Повезани чланци