Socket.SendTimeout proksi bağlantısı cəhdini məhdudlaşdırmır
Yalnız məlumat göndərməyə aid olan timeout təyin etmək əvəzinə proksi port yoxlamasını bağlantı qurulmasında məhdudlaşdırın.
Proksi yoxlayıcısı SendTimeout = 200 təyin edir, Connect çağırır və gözlənildiyindən xeyli uzun gözləyir. Timeout yoxlayıcının hələ çatmadığı əməliyyata bağlanıb.
Socket.SendTimeout sinxron göndərmələri idarə edir. Sinxron bağlantı cəhdinə 200 ms vaxt həddi vermir. Connect-dən əvvəl yuxu əlavə etmək yalnız başqa bir gecikmə əlavə edir.
Gözləyən əməliyyatı ləğv edin
Ləğv edilə bilən overload təqdim edən müasir .NET hədəfində asinxron yoxlama büdcəsini bağlantı qurulmasına tətbiq edə bilər:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);
Parça async metoda aiddir, proksi hostu və portu çağıran tərəfindən verilir; proksi siyahısından geniş ictimai namizəd bu iki girişi təmin edə bilər. Yoxlayıcı uğursuzluq səbəblərini bildirirsə, ləğvi socket xətasından ayrı idarə edin. Müştərini dispose etmək tamamlanmış yoxlamaların socket toplamasının qarşısını alır.
Köhnə .NET Framework kodu bütün müasir overload-lara malik deyil. Dəstəklənən asinxron bağlantı quruluşundan istifadə edin və cəhddən əl çəkərkən socket-i açıq şəkildə bağlayın. Yalnız gözləmənizi dayandırmaq altdakı əməliyyatın dayandığını sübut etmir.
Yaşıl nəticə hələ də kiçik nəticədir
Uğurlu TCP bağlantısı bu müştərinin dinləyən son nöqtəyə çatdığını sübut edir. O, SOCKS razılaşdırmayıb, HTTP proksinə autentifikasiya olmayıb, CONNECT açmayıb və istənilən vebsayt cavabını almayıb.
O sonrakı mərhələlərə öz məhdud idarəetməsini verin və ya onların vasitəsilə qəsdən ümumi son tarix keçirin. Əks halda təmir edilmiş bağlantı taymeri mükəmməl işləyə bilər, halbuki yoxlayıcı proksi handshake üçün daha bir dəqiqə sərf edir.