Víðari TCP hálvlukking eftir at tøma bíðandi bytini
Handfara EOF í TCP proxy uttan at mistá data í rað og uttan at skera svar í hinari ættini av.
Klienturin er liðugur at senda, proxy sær EOF, og svarið hvørvur. At lata báðar proxy-sokkar aftur beinanvegin kann geva júst hesa raðfesting. Í einum TCP-relay merkir ein ordiligur endi í aðrari ætt ikki, at hin ættin er liðug.
Hugsa tær ein klient, sum sendir eina fyrispurning, letur sendandi síðu sína aftur og bíðar eftir svarinum:
client -- request, then FIN --> proxy --> service
client <-------- reply ------- proxy <-- service
Proxy hevur tvær TCP-sambindingar og tveir bytastreymar, sum flyta seg óheftir av hvørjum øðrum. Tað má flyta boðið um inntaksenda víðari, eftir at tað hevur flutt bytini, sum koma áðrenn.
Tøm raðina, áðrenn EOF verður sendur víðari
Við einum móttøku av stødd, sum ikki er null, á einum TCP-streymi merkir ein null í aftur, at tann innkomandi streymurin er ordiliga endaður. Merk tann lesiættina sum liðuga. Steðga at bíða eftir meira inntaki frá henni, men goym bytini, sum longu standa í rað til hin sokkin.
Tá raðin frá klienti til tænastu er tømd, kalla shutdown(service_socket, SHUT_WR) á ein POSIX-sokk. Tað endar víðari sending móti tænastuni, meðan ættin frá tænastu til klient verður tøk. Tá tænastan er liðug við sítt svar, nýt hina speglaðu handfaring eftir at svarraðin er tømd.
At lata deskriptorarnar aftur hoyrir til tað punktið, har báðar ættir og bíðandi bufferar teirra eru liðug, ella har ein feilur ella avlýsing krevur enda. Halt eina markaða tíðarfreist fyri ein javning, sum ongantíð ger sína restandi helvt liðuga.
Tøka er eitt boð um at lesa
Ein lesandi sokk kann hava data ella eina EOF-støðu. Kalla recv og tulka úrslitið. Positiv tøl eru byti at senda víðari; null er ættarendin. Á einum ikki-blokkerandi sokki merkir EAGAIN ella EWOULDBLOCK, at har er ikki meira inntak beint nú, meðan EINTR kann krevja eina roynd afturat. Hvørki er sama hending sum EOF.
Leita ikki eftir FIN-flaggi í afturgivna bytabuffarinum. TCP flytur eitt ordiligt bytastreym til hesa API; pakkagrensir og FIN-segmentið eru ikki vanligur applikašonsnyttulastur.
Hetta er lívsferðin hjá einum ráum bytatunli. Ein HTTP-proxy, sum greinar boð, má framvegis virða HTTP-rammuna, og ein TLS-endandi proxy hevur eisini eina TLS-afturlatingarprotokoll. Halt tar protokollavgerðirnar omanfyri tann ættarstýrda TCP-relayin.