Պրոքսիի ստուգիչը սահմանում է 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 մեթոդին, պրոքսիի հոսթն ու պորտը տալիս է կանչողը. հանրային թեկնածուն պրոքսիների ցանկից կարող է տալ այդ երկու մուտքերը։ Եթե ստուգիչը հաղորդում է ձախողման պատճառները, չեղարկումը մշակեք socket-ի սխալից առանձին։ Կլիենտի ազատումը նաև թույլ չի տալիս ավարտված ստուգումներին կուտակել socket-ներ։

Հին .NET Framework կոդը չունի բոլոր ժամանակակից overload-ները։ Օգտագործեք աջակցվող ասինխրոն միացման կարգավորում և փորձից հրաժարվելիս բացահայտ փակեք socket-ը։ Միայն ձեր սպասումը դադարեցնելը չի ապացուցում, որ հիմքում ընկած գործողությունը դադարել է։

Կանաչ արդյունքը դեռ փոքր արդյունք է

Հաջող TCP միացումը ապացուցում է, որ այս կլիենտը հասել է լսող վերջնակետի։ Այն չի բանակցել SOCKS-ի շուրջ, չի նույնականացել HTTP պրոքսիի մոտ, չի բացել CONNECT և չի ստացել ցանկալի կայքի պատասխանը։

Այդ հետագա փուլերին տվեք իրենց սեփական սահմանափակ մշակումը, կամ դրանց միջով անցկացրեք դիտավորյալ ընդհանուր վերջնաժամկետ։ Հակառակ դեպքում վերանորոգված միացման ժամաչափը կարող է կատարյալ աշխատել, մինչ ստուգիչը ևս մեկ րոպե է ծախսում պրոքսիի handshake-ի սպասելիս։

Առնչվող հոդվածներ