ഒരു പ്രോക്സി പരിശോധകൻ 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-നായി മറ്റൊരു മിനിറ്റ് ചെലവഴിക്കുന്നു.

അനുബന്ധ ലേഖനങ്ങൾ