Proxy pārbaudītājs iestata SendTimeout = 200, izsauc Connect un gaida daudz ilgāk nekā gaidīts. Timeout ir piesaistīts darbībai, kuru pārbaudītājs vēl nav sasniedzis.

Socket.SendTimeout kontrolē sinhronās sūtīšanas. Tas nepiešķir sinhronam savienojuma mēģinājumam 200 ms termiņu. Miega pievienošana pirms Connect tikai pievieno vēl vienu aizkavi.

Atceliet gaidošo darbību

Mūsdienīgā .NET mērķī, kas piedāvā atceļamo overload, asinhrona pārbaude var attiecināt savu budžetu uz savienojuma izveidi:

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

Fragments pieder async metodei, un proxy resursdatoru un portu nodrošina izsaucējs; publisks kandidāts no proxy saraksta var nodrošināt šos divus ievades datus. Apstrādājiet atcelšanu atsevišķi no socket kļūdas, ja pārbaudītājs ziņo par neveiksmes iemesliem. Klienta atbrīvošana arī neļauj pabeigtajām pārbaudēm uzkrāt socketus.

Vecākam .NET Framework kodam nav visu mūsdienīgo overload. Izmantojiet atbalstītu asinhronu savienojuma izkārtojumu un skaidri aizveriet socket, kad atsakāties no mēģinājuma. Tikai savas gaidīšanas apturēšana nepierāda, ka pamatā esošā darbība ir apstājusies.

Zaļais rezultāts joprojām ir mazs rezultāts

Veiksmīgs TCP savienojums pierāda, ka šis klients ir sasniedzis klausošu galapunktu. Tas nav pārrunājis SOCKS, nav autentificējies HTTP proxy, nav atvēris CONNECT un nav saņēmis vēlamo vietnes atbildi.

Dodiet tiem vēlākajiem posmiem savu ierobežotu apstrādi vai vediet caur tiem apzinātu kopējo termiņu. Citādi salabotais savienojuma taimeris var lieliski darboties, kamēr pārbaudītājs pavada vēl vienu minūti, gaidot proxy handshake.

Saistītie raksti