Socket.SendTimeout ప్రాక్సీ కనెక్షన్ ప్రయత్నాన్ని పరిమితం చేయదు
డేటా పంపడానికి మాత్రమే వర్తించే టైమ్అవుట్ సెట్ చేయడం బదులు కనెక్షన్ ఏర్పాటు సమయంలో ప్రాక్సీ పోర్ట్ పరీక్షను పరిమితం చేయండి.
ప్రాక్సీ తనిఖీదారు 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 కోసం మరో నిమిషం గడుపుతుంది.