NetworkStream.DataAvailable == false भन्नाले तुरुन्तै पढ्न तयार बाइटहरू छैनन् भन्ने बुझिन्छ। यसको अर्थ HTTP प्रतिक्रिया पूरा भयो भन्ने होइन। त्यहाँ रोकिने लूपले प्याकेटहरूबीचको अन्तरालमा पूर्ण रूपमा सामान्य SOCKS डाउनलोड काट्न सक्छ।

SOCKS ले TCP जडान स्थापना गरेपछि पनि पूर्णताको नियम HTTP फ्रेमिङले नै दिन्छ:

  • Content-Length भएको बडी घोषित सामग्री बाइटपछि अन्त्य हुन्छ।
  • Chunked प्रतिक्रियालाई यसको अन्तिम chunk र लागू हुने trailer चाहिन्छ।
  • जडान-सीमित प्रतिक्रिया जडानसँगै अन्त्य हुन्छ।
  • केही स्थिति र HEAD का प्रतिक्रियामा बडी हुँदैन।

लागू हुने नियम निर्धारण गर्न स्थिति र हेडर पढ्नुहोस्। केवल बन्द हुने प्रतीक्षा गर्नु सामान्य समाधान होइन, किनभने पूर्ण HTTP प्रतिक्रियाले जडान खुला छोड्न सक्छ। एउटा बफरको क्षमता पनि प्रतिक्रियाको लम्बाइसँग उत्तिकै असम्बन्धित छ।

HTTP क्लाइन्टको फ्रेमिङ कार्यान्वयन प्रयोग गर्नुहोस् जब यसले छानिएको प्रोक्सी यातायात समर्थन गर्छ। उपयुक्त आधुनिक .NET रनटाइममा HttpClient को मूल SOCKS समर्थन विचार गर्नुहोस्। कच्चा कार्यान्वयनले आंशिक हेडर र बडी पढाइका बीच पार्सिङ स्थिति कायम राख्नुपर्छ र सफल पूर्णतालाई रद्द, टाइमआउट र अप्रत्याशित EOF बाट छुट्याउनुपर्छ। खाली नभएको पढाइ अनुरोधमा शून्य बाइट पढिएको भन्नाले स्ट्रिम सकियो भन्ने हो; यो अहिले कुनै बाइट लाइनमा नभएको भन्दा फरक हो।

प्रोक्सीले समयको अन्तराल देखिने बनाउन सक्छ, तर यसले खाली प्राप्ति लाइनलाई सन्देश-अन्त्य चिन्हमा बदल्दैन।

सम्बन्धित लेखहरू