प्रॉक्सी जाँचकर्ता 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 करना पूरी हो चुकी जाँचों को sockets जमा करने से भी रोकता है।

पुराने .NET Framework कोड में हर आधुनिक overload नहीं होता। समर्थित async कनेक्शन व्यवस्था अपनाएँ और प्रयास छोड़ते समय socket को स्पष्ट रूप से बंद करें। केवल अपनी प्रतीक्षा रोक देना यह सिद्ध नहीं करता कि कोई अंतर्निहित क्रिया रुक गई है।

हरा परिणाम अब भी छोटा परिणाम है

सफल TCP कनेक्शन सिद्ध करता है कि यह क्लाइंट किसी सुनते एंडपॉइंट तक पहुँचा। इसने SOCKS पर बातचीत नहीं की, HTTP प्रॉक्सी पर प्रमाणीकरण नहीं किया, CONNECT नहीं खोला और न ही इच्छित वेबसाइट प्रतिक्रिया प्राप्त की।

उन बाद के चरणों को उनका अपना सीमित प्रबंधन दें, या उनके माध्यम से एक जानबूझकर तय कुल समय-सीमा ले जाएँ। अन्यथा मरम्मत किया गया कनेक्शन टाइमर पूरी तरह काम कर सकता है जबकि जाँचकर्ता प्रॉक्सी handshake की प्रतीक्षा में एक और मिनट बिताता है।

संबंधित लेख