Socket.SendTimeout nuk e kufizon një përpjekje lidhjeje përmes proxy
Kufizoni provën e portës së proxy në vendosjen e lidhjes në vend që të vendosni një timeout që vlen vetëm për dërgimin e të dhënave.
Një kontrollues proxy vendos SendTimeout = 200, thërret Connect dhe pret shumë më gjatë sesa pritej. Timeout-i është i lidhur me një operacion që kontrolluesi nuk e ka arritur ende.
Socket.SendTimeout kontrollon dërgimet sinkrone. Nuk i jep një përpjekjeje lidhjeje sinkrone një afat prej 200 ms. Shtimi i një gjumi para Connect shton vetëm një vonesë tjetër.
Anuloni operacionin që po pret
Në një objektiv modern .NET që ofron mbingarkesën e anulueshme, një provë asinkrone mund të zbatojë buxhetin e saj në vendosjen e lidhjes:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);
Fragmenti i përket një metode async, me hostin dhe portën e proxy-t të siguruara nga thirrësi; një kandidat publik nga një listë proxy mund të sigurojë ato dy hyrje. Trajtojeni anulimin veçmas nga një gabim socket nëse kontrolluesi raporton arsyet e dështimit. Hedhja e klientit parandalon gjithashtu që provat e përfunduara të grumbullojnë socket-e.
Kodi më i vjetër .NET Framework nuk i ka të gjitha mbingarkesat moderne. Përdorni një rregullim asinkron të lidhjes të mbështetur dhe mbyllni socket-in në mënyrë eksplicite kur e braktisni përpjekjen. Vetëm ndalimi i pritjes suaj nuk provon se një operacion themelor është ndalur.
Rezultati i gjelbër është ende një rezultat i vogël
Një lidhje TCP e suksesshme provon se ky klient arriti një pikë fundore që dëgjon. Nuk ka negociuar SOCKS, nuk është vërtetuar në një proxy HTTP, nuk ka hapur CONNECT dhe nuk ka marrë përgjigjen e dëshiruar të faqes.
Jepini atyre fazave të mëvonshme trajtimin e tyre të kufizuar, ose kaloni përmes tyre një afat të përgjithshëm të qëllimshëm. Përndryshe kohëmatësi i riparuar i lidhjes mund të funksionojë në mënyrë të përsosur ndërsa kontrolluesi shpenzon edhe një minutë duke pritur një handshake proxy.