NetworkStream.DataAvailable == false म्हणजे त्वरित वाचण्यासाठी कोणतेही बाइट तयार नाहीत. याचा अर्थ HTTP प्रतिसाद पूर्ण झाला असा नाही. तिथे थांबणारा लूप पॅकेटमधील अंतराच्या काळात अगदी सामान्य SOCKS डाउनलोड कापू शकतो.

SOCKS ने TCP कनेक्शन प्रस्थापित केल्यानंतरही पूर्णतेचा नियम HTTP फ्रेमिंग देतो:

  • Content-Length असलेला बॉडी जाहीर केलेल्या सामग्री बाइटनंतर संपतो.
  • Chunked प्रतिसादास त्याचा शेवटचा chunk आणि लागू trailer आवश्यक असतात.
  • कनेक्शन-मर्यादित प्रतिसाद कनेक्शनसोबत संपतो.
  • काही स्थिती आणि HEAD ला दिलेल्या प्रतिसादांना बॉडी नसते.

लागू नियम ठरवण्यासाठी स्थिती आणि हेडर वाचा. केवळ बंद होण्याची वाट पाहणे सामान्य उपाय नाही, कारण पूर्ण HTTP प्रतिसाद कनेक्शन उघडे ठेवू शकतो. एका बफरची क्षमताही प्रतिसादाच्या लांबीशी तितकीच असंबंधित आहे.

HTTP क्लायंटची फ्रेमिंग अंमलबजावणी निवडलेल्या प्रॉक्सी वाहतुकीला समर्थन देत असेल तेव्हा वापरा. सुसंगत आधुनिक .NET रनटाइमवर HttpClient चे मूळ SOCKS समर्थन विचारात घ्या. कच्च्या अंमलबजावणीने आंशिक हेडर आणि बॉडी वाचनांदरम्यान पार्सिंग स्थिती टिकवली पाहिजे आणि यशस्वी पूर्णता रद्द करणे, कालबाह्यता आणि अनपेक्षित EOF पासून वेगळी ओळखली पाहिजे. रिकाम्या नसलेल्या वाचन विनंतीत शून्य बाइट वाचणे म्हणजे प्रवाह संपला; हे या क्षणी रांगेत बाइट नसण्यापेक्षा वेगळे आहे.

प्रॉक्सी वेळेचे अंतर लक्षात येण्याजोगे करू शकतो, परंतु तो रिकाम्या प्राप्ती रांगेचे संदेश-अंत चिन्हात रूपांतर करत नाही.

संबंधित लेख