NetworkStream.DataAvailable == false کا مطلب ہے کہ فوری پڑھنے کے لیے کوئی بائٹ تیار نہیں۔ اس کا مطلب یہ نہیں کہ HTTP جواب مکمل ہو گیا ہے۔ وہاں رکنے والا لوپ پیکٹوں کے درمیان وقفے میں بالکل معمول کا SOCKS ڈاؤن لوڈ کاٹ سکتا ہے۔

SOCKS کے TCP کنکشن قائم کرنے کے بعد بھی تکمیل کا قاعدہ HTTP فریمنگ ہی بتاتی ہے:

  • Content-Length والا باڈی اعلان شدہ مواد کے بائٹوں کے بعد ختم ہوتا ہے۔
  • chunked جواب کو اس کا آخری chunk اور متعلقہ trailer درکار ہوتے ہیں۔
  • کنکشن سے محدود جواب کنکشن کے ساتھ ختم ہوتا ہے۔
  • کچھ اسٹیٹس اور HEAD کے جوابات میں باڈی نہیں ہوتی۔

قابلِ اطلاق قاعدہ طے کرنے کے لیے اسٹیٹس اور ہیڈر پڑھیں۔ صرف بند ہونے کا انتظار کرنا عام حل نہیں، کیونکہ مکمل HTTP جواب کنکشن کھلا چھوڑ سکتا ہے۔ ایک بفر کی گنجائش بھی جواب کی لمبائی سے اتنی ہی غیر متعلق ہے۔

HTTP کلائنٹ کی فریمنگ پر عمل درآمد اس وقت استعمال کریں جب وہ منتخب پروکسی ٹرانسپورٹ کو سپورٹ کرے۔ موزوں جدید .NET رن ٹائم پر HttpClient کی مقامی SOCKS سپورٹ پر غور کریں۔ خام عمل درآمد کو جزوی ہیڈروں اور باڈی پڑھنے کے دوران پارسنگ حالت برقرار رکھنی چاہیے اور کامیاب تکمیل کو منسوخی، ٹائم آؤٹ اور غیر متوقع EOF سے الگ پہچاننا چاہیے۔ غیر خالی پڑھنے کی درخواست میں صفر بائٹ پڑھنا یعنی اسٹریم ختم ہو گئی؛ یہ اس وقت قطار میں کوئی بائٹ نہ ہونے سے مختلف ہے۔

پروکسی وقت کے وقفوں کو نمایاں کر سکتا ہے، مگر وہ خالی وصولی قطار کو پیغام کے اختتام کا نشان نہیں بناتا۔

متعلقہ مضامین