زیر التوا بائٹس خالی کرنے کے بعد TCP نصف بندش آگے بھیجنا
TCP پراکسی میں EOF سنبھالیں، قطار میں موجود ڈیٹا ضائع کیے بغیر اور دوسری سمت میں جواب کاٹے بغیر۔
کلائنٹ بھیجنا ختم کرتا ہے، پراکسی EOF دیکھتی ہے، اور جواب غائب ہو جاتا ہے۔ پراکسی کے دونوں ساکٹ فوراً بند کرنا بالکل وہی ترتیب پیدا کر سکتا ہے۔ TCP ریلے میں ایک سمت میں منظم اختتام کا مطلب یہ نہیں کہ دوسری سمت ختم ہو گئی۔
ایسے کلائنٹ پر غور کریں جو درخواست بھیجتا ہے، اپنی بھیجنے والی طرف بند کرتا ہے اور جواب کا انتظار کرتا ہے:
client -- request, then FIN --> proxy --> service
client <-------- reply ------- proxy <-- service
پراکسی کے دو TCP کنکشن اور آزادانہ حرکت کرنے والی دو بائٹ اسٹریمیں ہیں۔ اسے اپنے سے پہلے آنے والے بائٹس آگے بھیجنے کے بعد ان پٹ کے اختتام کا اشارہ بھی آگے لے جانا ہوتا ہے۔
EOF آگے بھیجنے سے پہلے قطار خالی کریں
TCP اسٹریم پر غیر صفر جسامت کی وصولی میں، صفر کا لوٹنا اُس آنے والی اسٹریم کے منظم اختتام کی نشاندہی کرتا ہے۔ اُس پڑھنے کی سمت کو مکمل نشان زد کریں۔ اُس سے مزید ان پٹ کا انتظار بند کریں، لیکن مخالف ساکٹ کے لیے پہلے سے قطار میں موجود بائٹس رکھیں۔
کلائنٹ سے سروس کی طرف قطار خالی ہونے کے بعد، POSIX ساکٹ پر shutdown(service_socket, SHUT_WR) کال کریں۔ یہ سروس کی طرف مزید ترسیل ختم کرتا ہے جبکہ سروس سے کلائنٹ کی سمت دستیاب رہتی ہے۔ جب سروس اپنا جواب مکمل کر لے، تو جواب کی قطار خالی کرنے کے بعد آئینے والا عمل لاگو کریں۔
ڈسکرپٹرز بند کرنا اُس مقام سے متعلق ہے جہاں دونوں سمتیں اور اُن کے زیر التوا بفر مکمل ہو چکے ہوں، یا جہاں کسی خرابی یا منسوخی کے لیے اختتام ضروری ہو۔ ایسے ساتھی کے لیے محدود وقت رکھیں جو کبھی اپنا باقی آدھا حصہ مکمل نہیں کرتا۔
تیاری پڑھنے کی دعوت ہے
پڑھنے کے قابل ساکٹ میں ڈیٹا یا EOF حالت ہو سکتی ہے۔ recv کال کریں اور اُس کے نتیجے کی تشریح کریں۔ مثبت اعداد وہ بائٹس ہیں جو آگے بھیجنے ہیں؛ صفر سمت کا اختتام ہے۔ نان بلاکنگ ساکٹ پر، EAGAIN یا EWOULDBLOCK کا مطلب ہے کہ ابھی مزید ان پٹ نہیں، جبکہ EINTR دوبارہ کوشش کا تقاضا کر سکتا ہے۔ دونوں میں سے کوئی بھی EOF جیسا وہی واقعہ نہیں ہے۔
واپس ملنے والے بائٹ بفر میں FIN جھنڈا نہ تلاش کریں۔ TCP اِس API کو ترتیب وار بائٹ اسٹریم فراہم کرتا ہے؛ پیکٹ کی حدیں اور FIN قطعہ عام ایپلیکیشن پے لوڈ نہیں ہیں۔
یہ خام بائٹ سرنگ کا زندگی نامہ ہے۔ پیغامات تجزیہ کرنے والی HTTP پراکسی کو پھر بھی HTTP فریمنگ کا احترام کرنا ہوتا ہے، اور TLS ختم کرنے والی پراکسی میں بھی TLS بندش کا پروٹوکول ہوتا ہے۔ وہ پروٹوکول فیصلے سمتی TCP ریلے کے اوپر رکھیں۔