Miðla TCP hálflokun eftir að hafa tæmt biðbætin
Meðhöndlaðu EOF í TCP milliþjóni án þess að missa gögn í biðröð eða klippa svar í hina áttina.
Skjólstæðingurinn lýkur sendingu, milliþjónninn sér EOF og svarið hverfur. Að loka báðum milliþjóns-sokkunum undir eins getur valdið nákvæmlega þeirri röð. Í TCP-endurvarpi þýðir skipulegur endir í aðra áttina ekki að hin áttin sé búin.
Íhugaðu skjólstæðing sem sendir beiðni, lokar sendingarhliðinni og bíður svars:
client -- request, then FIN --> proxy --> service
client <-------- reply ------- proxy <-- service
Milliþjónninn hefur tvær TCP-tengingar og tvo bætastrauma sem hreyfast óháð hvor öðrum. Hann verður að bera áfram merkið um endi inntaks, eftir að hafa borið bætin sem koma á undan því.
Tæmdu biðröðina áður en EOF er miðlað
Við móttöku af stærð sem er ekki núll á TCP-straumi bendir núll í skilum til skipulegs endis á þeim innkomna straumi. Merktu þá lestrarátt sem lokna. Hættu að bíða eftir meira inntaki frá henni, en haltu bætunum sem þegar eru í biðröð fyrir gagnstæða sokkinn.
Þegar biðröðin frá skjólstæðingi til þjónustu hefur tæmst, kallaðu á shutdown(service_socket, SHUT_WR) á POSIX-sokk. Það endar frekari sendingu til þjónustunnar en heldur áttinni frá þjónustu til skjólstæðings opinni. Þegar þjónustan lýkur svarinu sínu, beittu speglaðri aðgerð eftir að svar-biðröðin hefur tæmst.
Lokun lýsinganna á heima á þeim punkti þar sem báðar áttir og biðminni þeirra eru búnar, eða þar sem villa eða aflýsing krefst stöðvunar. Haltu takmörkuðum tímafresti fyrir jafningja sem klárar aldrei hinn helminginn sinn.
Vilji til lestrar er boð um að lesa
Læsilegur sokkur getur haft gögn eða EOF-ástand. Kallaðu á recv og túlkaðu niðurstöðuna. Jákvæðar tölur eru bæti til að miðla; núll er endir áttarinnar. Á sokk sem læsir ekki þýðir EAGAIN eða EWOULDBLOCK að það er ekkert inntak í augnablikinu, en EINTR gæti krafist endurtöku. Hvort tveggja er ekki sami atburður og EOF.
Ekki leita að FIN-fána í skilaða bætabiðminninu. TCP afhendir þessu API skipulegan bætastrauma; pakkamörk og FIN-hlutinn eru ekki venjulegt forritsgagn.
Þetta er lífsferill hrára bætagangs. HTTP-milliþjónn sem þáttar skilaboð verður samt að virða HTTP-ramma, og milliþjónn sem endar TLS hefur líka TLS-lokunarreglur. Haltu þeim reglum fyrir ofan áttstýrða TCP-endurvarpið.