Proksi tekshiruvchisi SendTimeout = 200 ni o'rnatadi, Connect ni chaqiradi va kutilganidan ancha uzoq kutadi. Timeout tekshiruvchi hali yetib bormagan operatsiyaga bog'langan.

Socket.SendTimeout sinxron yuborishlarni boshqaradi. U sinxron ulanish urinishiga 200 ms muddat bermaydi. Connect oldidan uyqu qo'shish faqat yana bir kechikish qo'shadi.

Kutayotgan operatsiyani bekor qiling

Bekor qilinadigan overload taqdim etuvchi zamonaviy .NET nishonida asinxron tekshiruv o'z byudjetini ulanish o'rnatilishiga qo'llashi mumkin:

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

Fragment async usulga tegishli, proksi xosti va portini chaqiruvchi beradi; proksi ro'yxatidan ommaviy nomzod o'sha ikki kirishni bera oladi. Agar tekshiruvchi muvaffaqiyatsizlik sabablarini xabar qilsa, bekor qilishni socket xatosidan alohida ko'rib chiqing. Mijozni dispose qilish tugallangan tekshiruvlarning socket to'plashini ham oldini oladi.

Eski .NET Framework kodida barcha zamonaviy overload yo'q. Qo'llab-quvvatlanadigan asinxron ulanish tartibidan foydalaning va urinishdan voz kechganda socketni aniq yoping. Faqat kutishingizni to'xtatish ostidagi operatsiya to'xtaganini isbotlamaydi.

Yashil natija hamon kichik natija

Muvaffaqiyatli TCP ulanish bu mijoz tinglayotgan oxirgi nuqtaga yetganini isbotlaydi. U SOCKS bo'yicha kelishmagan, HTTP proksida autentifikatsiyadan o'tmagan, CONNECT ochmagan va kerakli sayt javobini olmagan.

O'sha keyingi bosqichlarga o'zlarining cheklangan ishlovini bering yoki ular orqali ataylab umumiy muddat o'tkazing. Aks holda tuzatilgan ulanish taymeri mukammal ishlashi mumkin, tekshiruvchi esa proksi handshake kutish uchun yana bir daqiqa sarflaydi.

O'xshash maqolalar