د پراکسي پلټونکی SendTimeout = 200 ټاکي، Connect غواړي او له تمې ډېر زیات انتظار کوي. د مهال حد د هغې کړنې سره تړلی دی چې پلټونکی لا نه دی وررسېدلی.

Socket.SendTimeout هممهاله لېږنې کنټرولوي. دا د هممهاله اړیکې هڅې ته د 200 ms موده نه ورکوي. له Connect دمخه خوب ورزیاتول یوازې بله ځنډ ورزیاتوي.

هغه کړنه لغوه کړئ چې انتظار کوي

په یوه عصري .NET هدف چې د لغوه کېدونکې overload وړاندې کوي، یوه 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 لپاره بله یوه دقیقه تېروي.

اړوندې مقالې