NetworkStream.DataAvailable HTTP ప్రతిస్పందన ముగింపును సూచించదు
ముగింపు షరతుగా NetworkStream.DataAvailable బదులు సందేశ ఫ్రేమింగ్ను ఉపయోగించి కత్తిరించబడిన HTTP డౌన్లోడ్లను నివారించండి.
NetworkStream.DataAvailable == false అంటే వెంటనే చదవడానికి బైట్లు సిద్ధంగా లేవు. HTTP ప్రతిస్పందన పూర్తయిందని అర్థం కాదు. అక్కడ ఆగే లూప్ ప్యాకెట్ల మధ్య విరామ సమయంలో పూర్తిగా సాధారణ SOCKS డౌన్లోడ్ను కత్తిరించగలదు.
SOCKS TCP కనెక్షన్ను ఏర్పాటు చేసిన తర్వాత కూడా పూర్ణత్వ నియమాన్ని HTTP ఫ్రేమింగ్ ఇస్తుంది:
- Content-Length ఉన్న బాడీ ప్రకటించిన కంటెంట్ బైట్ల తర్వాత ముగుస్తుంది.
- Chunked ప్రతిస్పందనకు దాని చివరి chunk మరియు వర్తించే trailer అవసరం.
- కనెక్షన్-పరిమిత ప్రతిస్పందన కనెక్షన్తో పాటు ముగుస్తుంది.
- కొన్ని స్థితులు మరియు HEAD కి ఇచ్చే ప్రతిస్పందనలకు బాడీ ఉండదు.
వర్తించే నియమాన్ని నిర్ణయించడానికి స్థితి మరియు హెడర్లను చదవండి. కేవలం మూసివేత కోసం వేచి ఉండటం సాధారణ పరిష్కారం కాదు, ఎందుకంటే పూర్తి HTTP ప్రతిస్పందన కనెక్షన్ను తెరిచి ఉంచగలదు. ఒక బఫర్ సామర్థ్యం కూడా ప్రతిస్పందన పొడవుతో సంబంధం లేదు.
ఎంచుకున్న ప్రాక్సీ రవాణాను HTTP క్లయింట్ ఫ్రేమింగ్ అమలు మద్దతు ఇచ్చినప్పుడు దాన్ని ఉపయోగించండి. అనుకూల ఆధునిక .NET రన్టైమ్లో HttpClient యొక్క స్థానిక SOCKS మద్దతును పరిగణించండి. ముడి అమలు పాక్షిక హెడర్లు మరియు బాడీ పఠనాల మధ్య పార్సింగ్ స్థితిని నిలుపుకోవాలి మరియు విజయవంతమైన పూర్ణత్వాన్ని రద్దు, టైమౌట్ మరియు ఊహించని EOF నుండి వేరు చేయాలి. ఖాళీ కాని పఠన అభ్యర్థనలో సున్నా బైట్లు చదవడం అంటే స్ట్రీమ్ ముగిసింది; ఇది ఈ క్షణంలో క్యూలో బైట్లు లేకపోవడం కంటే భిన్నం.
ప్రాక్సీ సమయ విరామాలను కనిపించేలా చేయగలదు, కానీ ఖాళీ స్వీకరణ క్యూను సందేశ ముగింపు గుర్తుగా మార్చదు.