Vidaresend TCP-halvlukking etter at dei ventande byta er tømde
Handter EOF i ein TCP-proxy utan å miste data i køen eller kutte svaret i den andre retninga.
Klienten er ferdig med å senda, proxyen ser EOF, og svaret forsvinn. Å lukke begge proxy-soklane med ein gong kan gi nøyaktig den sekvensen. I eit TCP-relé betyr ein ordentleg slutt i éi retning ikkje at den andre retninga er ferdig.
Tenk deg ein klient som sender ein førespurnad, lukkar sendesida si og ventar på svaret:
client -- request, then FIN --> proxy --> service
client <-------- reply ------- proxy <-- service
Proxyen har to TCP-samband og to bytestraumar som flyttar seg uavhengig. Han må føra signalet om slutten på inndata vidare, etter å ha ført byta som kjem framfor det vidare.
Tøm køen før EOF vert vidaresend
Ved ein mottak av ikkje-null storleik på ein TCP-straum tyder ein retur av null at den innkomande straumen er ordentleg avslutta. Merk den leseretninga som ferdig. Slutt å venta på meir inndata frå henne, men behald byta som alt står i kø for den motsette soklane.
Når køen frå klient til teneste er tømd, kall shutdown(service_socket, SHUT_WR) på ein POSIX-sokkel. Det avsluttar vidare overføring mot tenesta medan retninga frå teneste til klient vert verande tilgjengeleg. Når tenesta er ferdig med svaret sitt, bruk den spegla operasjonen etter at svarkøen er tømd.
Lukking av deskriptorane høyrer til punktet der båe retningane og dei ventande bufferane deira er ferdige, eller der ein feil eller avbryting krev avslutning. Hald ein avgrensa tidsfrist for ein part som aldri fullfører den attverande helvta si.
Klarheit er ei innbyding til å lesa
Ein lesbar sokkel kan ha data eller ein EOF-tilstand. Kall recv og tolk resultatet. Positive tal er byte som skal vidaresendast; null er slutten på retninga. På ein ikkje-blokkerande sokkel tyder EAGAIN eller EWOULDBLOCK at det ikkje er meir inndata akkurat no, medan EINTR kan krevje eit nytt forsøk. Ingen av dei er same hendinga som EOF.
Ikkje leit etter eit FIN-flagg i bytebufferen som vert returnert. TCP leverer ein ordna bytestraum til dette API-et; pakkegrenser og FIN-segmentet er ikkje vanleg applikasjonsnyttelast.
Dette er livssyklusen til ein rå bytetunnel. Ein HTTP-proxy som parsar meldingar må framleis respektere HTTP-rammeverket, og ein TLS-avsluttande proxy har òg ein TLS-nedstengingsprotokoll. Hald dei protokollavgjerdene over det retningsstyrte TCP-reléet.