Socket.SendTimeout прокси қосылымының әрекетін шектемейді
Тек деректер жіберуге қолданылатын timeout орнатудың орнына қосылым орнату кезінде прокси портын тексеруді шектеңіз.
Прокси тексерушісі SendTimeout = 200 орнатады, Connect шақырады және күткеннен әлдеқайда ұзақ күтеді. Timeout тексеруші әлі жетпеген операцияға байланған.
Socket.SendTimeout синхронды жіберулерді басқарады. Ол синхронды қосылу әрекетіне 200 ms мерзім бермейді. Connect алдында ұйқы қосу тек тағы бір кідіріс қосады.
Күтіп тұрған операцияны тоқтатыңыз
Болдырмауға болатын overload ұсынатын заманауи .NET нысанасында асинхронды тексеру өз бюджетін қосылымды орнатуға қолдана алады:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);
Фрагмент async әдіске жатады, прокси хосты мен портын шақырушы береді; прокси тізімінен алынған жария кандидат осы екі кірісті бере алады. Егер тексеруші сәтсіздік себептерін хабарласа, болдырмауды socket қатесінен бөлек өңдеңіз. Клиентті dispose ету аяқталған тексерулердің socket жинауын да болдырмайды.
Ескі .NET Framework кодында барлық заманауи overload жоқ. Қолдау көрсетілетін async қосылым құрылымын пайдаланыңыз және әрекеттен бас тартқанда socket-ті анық жабыңыз. Тек күтуді тоқтату астарындағы операцияның тоқтағанын дәлелдемейді.
Жасыл нәтиже әлі де шағын нәтиже
Сәтті TCP қосылымы бұл клиенттің тыңдап тұрған соңғы нүктеге жеткенін дәлелдейді. Ол SOCKS туралы келіспеген, HTTP проксиге аутентификацияланбаған, CONNECT ашпаған және қалаған сайт жауабын алмаған.
Ол кейінгі кезеңдерге өздерінің шектеулі өңдеуін беріңіз немесе олар арқылы әдейі жалпы мерзім өткізіңіз. Әйтпесе жөнделген қосылым таймері мінсіз жұмыс істеуі мүмкін, ал тексеруші прокси handshake күтуге тағы бір минут жұмсайды.