የ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 ማስተላለፊያ በላይ ይሁኑ።