Hindi nililimitahan ng Socket.SendTimeout ang pagtatangkang kumonekta sa proxy
Limitahan ang pagsubok sa port ng proxy sa pagtatatag ng koneksyon sa halip na magtakda ng timeout na tumatanggap lamang sa pagpapadala ng data.
Nagtatakda ng SendTimeout = 200 ang isang tagasuri ng proxy, tumatawag ng Connect at naghihintay nang mas matagal kaysa inaasahan. Nakakabit ang timeout sa operasyong hindi pa naaabot ng tagasuri.
Kinokontrol ng Socket.SendTimeout ang mga synchronous na pagpapadala. Hindi nito binibigyan ng 200 ms na takda ang isang synchronous na pagtatangkang kumonekta. Ang pagdaragdag ng pagtulog bago ang Connect ay nagdaragdag lamang ng isa pang pagkaantala.
Kanselahin ang operasyong naghihintay
Sa isang modernong target na .NET na nag-aalok ng nakakanselang overload, maaaring ilapat ng isang async na pagsusuri ang badyet nito sa pagtatatag ng koneksyon:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);
Ang bahagi ay kabilang sa isang async na paraan, na ang host at port ng proxy ay ibinibigay ng tumatawag; isang pampublikong kandidato mula sa listahan ng proxy ang makapagbibigay ng dalawang input na iyon. Pangasiwaan ang pagkansela nang hiwalay sa error ng socket kung iniuulat ng tagasuri ang mga dahilan ng pagkabigo. Ang pagtatapon ng kliyente ay pumipigil din sa mga natapos na pagsusuri na makapag-ipon ng mga socket.
Ang mas lumang .NET Framework na code ay walang lahat ng modernong overload. Gumamit ng suportadong async na kaayusan ng koneksyon at tahasang isara ang socket kapag iniiwan mo ang pagtatangka. Ang paghinto lamang ng iyong paghihintay ay hindi nagpapatunay na huminto ang isang pinagbabatayang operasyon.
Ang berdeng resulta ay maliit pa ring resulta
Ang matagumpay na koneksyong TCP ay nagpapatunay na naabot ng kliyenteng ito ang isang endpoint na nakikinig. Hindi pa ito nakipag-usap sa SOCKS, hindi nagpatunay sa isang proxy na HTTP, hindi nagbukas ng CONNECT at hindi nakatanggap ng gustong tugon ng website.
Bigyan ang mga susunod na yugto ng kanilang sariling limitadong pangangasiwa, o ipadaan sa kanila ang isang sinadyang kabuuang takda. Kung hindi, maaaring gumana nang perpekto ang naayos na timer ng koneksyon habang gumugugol ang tagasuri ng isa pang minuto sa paghihintay ng handshake ng proxy.