પ્રોક્સી ચકાસણીકર્તા 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 માટે બીજી મિનિટ ગાળે છે.

સંબંધિત લેખો