Klient lõpetab saatmise, puhverserver näeb EOF-i ja vastus kaob. Mõlema puhverserveri sokli kohene sulgemine võib põhjustada täpselt selle jada. TCP-relees ei tähenda korrapärane lõpp ühes suunas, et teine suund on lõppenud.

Mõelge kliendile, kes saadab päringu, sulgeb oma saatmispoole ja ootab vastust:

client -- request, then FIN --> proxy --> service
client <-------- reply ------- proxy <-- service

Puhverserveril on kaks TCP-ühendust ja kaks sõltumatult liikuvat baidivoogu. See peab edasi kandma sisendi lõpu märguande pärast seda, kui on edasi kandnud sellele eelnevad baidid.

Tühjendage järjekord enne EOF-i edasisaatmist

TCP-voo nullist erineva suurusega vastuvõtul näitab nulli tagastamine selle sissetuleva voo korrapärast lõppu. Märkige see lugemissuund lõpetatuks. Lõpetage sellest rohkema sisendi ootamine, kuid säilitage baidid, mis on vastassokli jaoks juba järjekorda pandud.

Kui kliendist teenusesse suunduv järjekord on tühjenenud, kutsuge POSIX-soklil välja shutdown(service_socket, SHUT_WR). See lõpetab edasise edastuse teenuse suunas, jättes teenusest kliendini suuna kättesaadavaks. Kui teenus oma vastuse lõpetab, rakendage peegeldatud toiming pärast vastusejärjekorra tühjendamist.

Kirjeldajate sulgemine kuulub hetke, mil mõlemad suunad ja nende ootel puhvrid on lõpetatud, või kui tõrge või tühistamine nõuab lõpetamist. Hoidke piiratud ajalõpp peeri jaoks, kes ei lõpeta kunagi oma järelejäänud poolt.

Valmisolek on kutse lugeda

Loetav sokkel võib sisaldada andmeid või EOF-i olekut. Kutsuge recv ja tõlgendage tulemust. Positiivsed arvud on edasisaadetavad baidid; null on suuna lõpp. Blokeerimata soklil tähendab EAGAIN või EWOULDBLOCK, et praegu rohkem sisendit ei ole, samas kui EINTR võib nõuda korduskatset. Kumbki ei ole sama sündmus mis EOF.

Ärge otsige tagastatud baidipuhvrist FIN-lippu. TCP toimetab sellele API-le korrastatud baidivoo; paketi piirid ja FIN-segment ei ole tavaline rakenduse kasulik koormus.

See on töötlemata baiditunneli elutsükkel. Sõnumeid parsiv HTTP-puhverserver peab endiselt järgima HTTP-raamistust, ja TLS-i lõpetaval puhverserveril on ka TLS-i sulgemisprotokoll. Hoidke need protokolliotsused suunapõhise TCP-relee kohal.

Seotud artiklid