En proxy-tjekker sætter SendTimeout = 200, kalder Connect og venter meget længere end forventet. Timeouten hænger på en handling, som tjekkeren endnu ikke er nået til.

Socket.SendTimeout styrer synkrone sends. Den giver ikke et synkront forbindelsesforsøg en frist på 200 ms. At tilføje en søvn før Connect tilføjer blot endnu en forsinkelse.

Annuller den handling, der venter

På et moderne .NET-mål med det annullerbare overload kan en asynkron test anvende sit budget på forbindelsesopbygningen:

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

Fragmentet hører til i en async-metode, hvor proxy-vært og -port leveres af kalderen; en offentlig kandidat fra en proxy-liste kan levere de to input. Håndtér annullering adskilt fra en socket-fejl, hvis tjekkeren rapporterer fejlårsager. At dispose klienten forhindrer også færdige tests i at samle sockets.

Ældre .NET Framework-kode har ikke alle moderne overloads. Brug en understøttet asynkron forbindelsesopstilling, og luk socketen eksplicit, når du opgiver forsøget. At stoppe din venten alene beviser ikke, at en underliggende handling er stoppet.

Det grønne resultat er stadig et lille resultat

En vellykket TCP-forbindelse beviser, at denne klient nåede et lyttende endepunkt. Den har ikke forhandlet SOCKS, autentificeret sig til en HTTP-proxy, åbnet CONNECT eller modtaget det ønskede websteds svar.

Giv de senere faser deres egen afgrænsede håndtering, eller før en bevidst samlet deadline igennem dem. Ellers kan den reparerede forbindelsestimer fungere perfekt, mens tjekkeren bruger endnu et minut på at vente på et proxy-handshake.

Relaterede artikler