Socket.SendTimeout non limita un tentativo di connessione proxy
Limita il controllo della porta del proxy all'instaurazione della connessione invece di impostare un timeout valido solo per l'invio dei dati.
Un verificatore di proxy imposta SendTimeout = 200, chiama Connect e attende molto più a lungo del previsto. Il timeout è legato a un'operazione che il verificatore non ha ancora raggiunto.
Socket.SendTimeout controlla gli invii sincroni. Non assegna a un tentativo di connessione sincrono una scadenza di 200 ms. Aggiungere un'attesa prima di Connect aggiunge solo un altro ritardo.
Annulla l'operazione in attesa
Su una destinazione .NET moderna che offre l'overload annullabile, un controllo asincrono può applicare il proprio budget all'instaurazione della connessione:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);
Il frammento appartiene a un metodo async, con host e porta del proxy forniti dal chiamante; un candidato pubblico da un elenco di proxy può fornire quei due input. Gestisci l'annullamento separatamente da un errore di socket se il verificatore riporta i motivi del fallimento. Liberare il client impedisce anche ai controlli completati di accumulare socket.
Il codice .NET Framework più vecchio non dispone di tutti gli overload moderni. Usa una disposizione di connessione asincrona supportata e chiudi esplicitamente il socket quando abbandoni il tentativo. Fermare solo la tua attesa non dimostra che un'operazione sottostante si sia fermata.
Il risultato verde è comunque un risultato piccolo
Una connessione TCP riuscita dimostra che questo client ha raggiunto un endpoint in ascolto. Non ha negoziato SOCKS, non si è autenticato a un proxy HTTP, non ha aperto CONNECT né ha ricevuto la risposta desiderata del sito.
Assegna a quelle fasi successive una propria gestione limitata, oppure fai passare attraverso di esse una scadenza complessiva intenzionale. Altrimenti il timer di connessione riparato può funzionare perfettamente mentre il verificatore passa un altro minuto in attesa di un handshake proxy.