Socket.SendTimeout प्रॉक्सी कनेक्शन प्रयत्न मर्यादित करत नाही
फक्त डेटा पाठवण्यास लागू होणारा टाइमआउट सेट करण्याऐवजी कनेक्शन स्थापित होताना प्रॉक्सी पोर्ट तपासणी मर्यादित करा.
प्रॉक्सी तपासक SendTimeout = 200 सेट करतो, Connect कॉल करतो आणि अपेक्षेपेक्षा खूप जास्त वेळ थांबतो. टाइमआउट त्या क्रियेशी जोडलेला आहे जिथे तपासक अजून पोहोचलेला नाही.
Socket.SendTimeout सिंक्रोनस पाठवणी नियंत्रित करते. ते सिंक्रोनस कनेक्शन प्रयत्नाला 200 ms ची मुदत देत नाही. Connect आधी झोप जोडल्याने फक्त आणखी एक विलंब जोडला जातो.
थांबलेली क्रिया रद्द करा
रद्द करता येणारे overload देणाऱ्या आधुनिक .NET लक्ष्यावर, async तपासणी तिचे बजेट कनेक्शन स्थापित करण्यावर लागू करू शकते:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);
हा तुकडा async पद्धतीत असतो, प्रॉक्सी होस्ट आणि पोर्ट कॉलर देतो; प्रॉक्सी यादीमधील सार्वजनिक उमेदवार ती दोन इनपुट देऊ शकतो. तपासक अयशस्वी होण्याची कारणे सांगत असेल तर रद्दीकरण socket त्रुटीपासून वेगळे हाताळा. क्लायंट dispose केल्याने पूर्ण झालेल्या तपासण्या socket साठवण्यापासूनही थांबतात.
जुन्या .NET Framework कोडमध्ये प्रत्येक आधुनिक overload नसतो. समर्थित async कनेक्शन रचना वापरा आणि प्रयत्न सोडताना socket स्पष्टपणे बंद करा. फक्त तुमची वाट थांबवणे हे अंतर्निहित क्रिया थांबली आहे याचा पुरावा ठरत नाही.
हिरवा निकाल अजूनही लहान निकाल आहे
यशस्वी TCP कनेक्शन सिद्ध करते की हा क्लायंट ऐकणाऱ्या टोकापर्यंत पोहोचला. त्याने SOCKS वर चर्चा केलेली नाही, HTTP प्रॉक्सीवर प्रमाणीकरण केलेले नाही, CONNECT उघडलेले नाही किंवा इच्छित वेबसाइट प्रतिसाद मिळवलेला नाही.
त्या पुढील टप्प्यांना त्यांचे स्वतःचे मर्यादित हाताळणी द्या, किंवा त्यांच्यातून हेतुपूर्वक एकूण मुदत न्या. अन्यथा दुरुस्त केलेला कनेक्शन टाइमर उत्तम काम करू शकतो, तर तपासक प्रॉक्सी handshake साठी आणखी एक मिनिट घालवतो.