Asiakas lopettaa lähettämisen, välityspalvelin näkee EOF:n ja vastaus katoaa. Molempien välityspalvelimen socketien sulkeminen heti voi aiheuttaa juuri tuon järjestyksen. TCP-välityksessä järjestynyt loppu yhdessä suunnassa ei tarkoita, että toinen suunta olisi päättynyt.

Tarkastellaan asiakasta, joka lähettää pyynnön, sulkee lähetyspuolensa ja odottaa vastausta:

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

Välityspalvelimella on kaksi TCP-yhteyttä ja kaksi itsenäisesti liikkuvaa tavuvirtaa. Sen on vietävä syötteen loppumisen osoitin eteenpäin vasta sen jälkeen, kun se on vienyt sitä edeltävät tavut.

Tyhjennä jono ennen EOF:n välittämistä

Kun TCP-virrasta vastaanotetaan nollasta poikkeava määrä, nollan palauttaminen ilmaisee kyseisen saapuvan virran järjestyneen lopun. Merkitse tämä lukusuunta päättyneeksi. Lopeta lisäsyötteen odottaminen siitä, mutta säilytä tavut, jotka on jo jonotettu vastakkaiselle socketille.

Kun asiakkaalta palvelimelle suuntautuva jono on tyhjentynyt, kutsu shutdown(service_socket, SHUT_WR) POSIX-socketilla. Se lopettaa jatkolähetyksen palvelinta kohti ja jättää palvelimelta asiakkaalle -suunnan käytettäväksi. Kun palvelin lopettaa vastauksensa, sovella peilattua toimenpidettä vastausjonon tyhjentämisen jälkeen.

Kuvaajien sulkeminen kuuluu kohtaan, jossa molemmat suunnat ja niiden odottavat puskurit ovat valmiit, tai jossa virhe tai peruutus vaatii lopetusta. Pidä rajattu aikakatkaisu vertaiselle, joka ei koskaan suorita jäljellä olevaa puoliskoaan.

Valmius on kutsu lukea

Luettavassa socketissa voi olla dataa tai EOF-tila. Kutsu recv ja tulkitse tulos. Positiiviset luvut ovat välitettäviä tavuja; nolla on suunnan loppu. Ei-estävässä socketissa EAGAIN tai EWOULDBLOCK tarkoittaa, että lisäsyötettä ei juuri nyt ole, kun taas EINTR voi vaatia uudelleenyrityksen. Kumpikaan ei ole sama tapahtuma kuin EOF.

Älä etsi palautetusta tavupuskurista FIN-lippua. TCP toimittaa tälle rajapinnalle järjestyneen tavuvirran; pakettien rajat ja FIN-segmentti eivät ole tavallista sovelluksen hyötykuormaa.

Tämä on raa'an tavutunnelin elinkaari. Viestit jäsentävä HTTP-välityspalvelin joutuu yhä noudattamaan HTTP-kehystystä, ja TLS:n päättävällä välityspalvelimella on myös TLS-sulkemisprotokolla. Pidä ne protokollapäätökset suunnatun TCP-välityksen yläpuolella.

Aiheeseen liittyvät artikkelit