Socket.SendTimeout tidak mengehadkan percubaan sambungan proksi
Hadkan ujian port proksi semasa pembentukan sambungan dan bukannya menetapkan timeout yang hanya terpakai pada penghantaran data.
Penyemak proksi menetapkan SendTimeout = 200, memanggil Connect dan menunggu jauh lebih lama daripada jangkaan. Timeout itu terikat pada operasi yang belum dicapai oleh penyemak.
Socket.SendTimeout mengawal penghantaran segerak. Ia tidak memberikan percubaan sambungan segerak had masa 200 ms. Menambah tidur sebelum Connect hanya menambah satu lagi kelewatan.
Batalkan operasi yang sedang menunggu
Pada sasaran .NET moden yang menyediakan overload boleh batal, ujian tak segerak boleh menggunakan bajetnya pada pembentukan sambungan:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);
Serpihan itu tergolong dalam kaedah async, dengan hos dan port proksi diberikan oleh pemanggil; calon awam daripada senarai proksi boleh memberikan kedua-dua input itu. Kendalikan pembatalan secara berasingan daripada ralat socket jika penyemak melaporkan sebab kegagalan. Membuang klien juga menghalang ujian yang selesai daripada mengumpul socket.
Kod .NET Framework lama tidak mempunyai setiap overload moden. Gunakan susunan sambungan tak segerak yang disokong dan tutup socket secara eksplisit apabila anda meninggalkan percubaan itu. Menghentikan penantian anda sahaja tidak membuktikan bahawa operasi asas telah berhenti.
Hasil hijau masih hasil kecil
Sambungan TCP yang berjaya membuktikan bahawa klien ini mencapai titik akhir yang mendengar. Ia belum merundingkan SOCKS, belum mengesahkan diri dengan proksi HTTP, belum membuka CONNECT dan belum menerima respons laman web yang dikehendaki.
Berikan peringkat seterusnya itu pengendalian terhad mereka sendiri, atau bawa had masa keseluruhan yang disengajakan melaluinya. Jika tidak, pemasa sambungan yang dibaiki boleh berfungsi dengan sempurna sementara penyemak menghabiskan satu minit lagi menunggu handshake proksi.