একটি প্রক্সি পরীক্ষক 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-এর জন্য আরেক মিনিট ব্যয় করে।

সম্পর্কিত নিবন্ধ