Хүлээгдэж буй байтуудыг гүйцээсний дараа 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 релейн дээр байлга.