Puhverserveri kontrollija seab SendTimeout = 200, kutsub välja Connect ja ootab palju kauem, kui oodatud. Timeout on seotud toiminguga, milleni kontrollija veel jõudnud ei ole.

Socket.SendTimeout juhib sünkroonseid saatmisi. See ei anna sünkroonsele ühenduskatsele 200 ms tähtaega. Une lisamine enne Connecti lisab vaid veel ühe viivituse.

Tühistage ootav toiming

Kaasaegsel .NET-sihtmärgil, mis pakub tühistatavat ülekoormust, saab asünkroonne kontroll rakendada oma eelarve ühenduse loomisele:

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

Fragment kuulub async-meetodisse, puhverserveri hosti ja porti annab kutsuja; avalik kandidaat puhverserverite loendist võib anda need kaks sisendit. Käsitlege tühistamist socketi veast eraldi, kui kontrollija teatab ebaõnnestumise põhjused. Kliendi vabastamine hoiab ka ära valminud kontrollide socketite kuhjumise.

Vanemal .NET Frameworki koodil ei ole kõiki kaasaegseid ülekoormusi. Kasutage toetatud asünkroonset ühenduslahendust ja sulgege socket katsest loobudes selgelt. Ainult oma ootamise peatamine ei tõesta, et aluseks olev toiming on peatunud.

Roheline tulemus on ikka väike tulemus

Edukas TCP-ühendus tõestab, et see klient jõudis kuulavasse lõpp-punkti. See ei ole läbirääkinud SOCKSit, autentinud HTTP-puhverserveri vastu, avanud CONNECTi ega saanud soovitud veebisaidi vastust.

Andke neile hilisematele etappidele oma piiratud käsitlus või viige nende kaudu läbi kavatsuslik üldine tähtaeg. Muidu võib parandatud ühenduse taimer töötada laitmatult, samal ajal kui kontrollija veedab veel minuti puhverserveri handshake'i oodates.

Seotud artiklid