Bir proxy denetleyicisi SendTimeout = 200 ayarlar, Connect çağırır ve beklenenden çok daha uzun süre bekler. Zaman aşımı, denetleyicinin henüz ulaşmadığı bir işleme bağlıdır.

Socket.SendTimeout eşzamanlı gönderimleri denetler. Eşzamanlı bir bağlantı denemesine 200 ms'lik bir süre sınırı vermez. Connect'ten önce uyku eklemek yalnızca bir gecikme daha ekler.

Bekleyen işlemi iptal edin

İptal edilebilir aşırı yüklemeyi sunan modern bir .NET hedefinde, eşzamansız bir deneme bütçesini bağlantı kurulumuna uygulayabilir:

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

Parça bir async yöntemine aittir; proxy ana bilgisayarı ve bağlantı noktası çağıran tarafından sağlanır; proxy listesinden genel bir aday bu iki girdiyi sağlayabilir. Denetleyici başarısızlık nedenlerini bildiriyorsa iptali soket hatasından ayrı ele alın. İstemcinin serbest bırakılması, tamamlanan denemelerin soket biriktirmesini de önler.

Daha eski .NET Framework kodu tüm modern aşırı yüklemelere sahip değildir. Desteklenen bir eşzamansız bağlantı düzeni kullanın ve denemeden vazgeçtiğinizde soketi açıkça kapatın. Yalnızca bekleyişinizi durdurmak, alttaki bir işlemin durduğunu kanıtlamaz.

Yeşil sonuç hâlâ küçük bir sonuçtur

Başarılı bir TCP bağlantısı, bu istemcinin dinleyen bir uç noktaya ulaştığını kanıtlar. SOCKS pazarlığı yapmamış, bir HTTP proxy'sinde kimlik doğrulamamış, CONNECT açmamış ve istenen web sitesi yanıtını almamıştır.

O sonraki aşamalara kendi sınırlı işleyişlerini verin veya bunların içinden kasıtlı bir genel son tarih geçirin. Aksi hâlde onarılmış bağlantı zamanlayıcısı kusursuz çalışırken denetleyici bir proxy el sıkışması için bir dakika daha harcar.

İlgili makaleler