Прокси текшерүүчү 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 күтүүгө дагы бир мүнөт жумшайт.

Тектеш макалалар