Sitove programovani

Pavel Kankovsky peak na kerberos.troja.mff.cuni.cz
Středa Duben 8 20:14:21 CEST 1998


On Wed, 8 Apr 1998, Ales Horak wrote:

> >    Pokud server na socket pustil close, tak spojeni jeste nemuselo
> > zaniknout, ale muze byt jenom polouzavrene (tj. zavrene jenom v jednom
> > smeru).

To neni close() ale shutdown(). (Je pravda, ze pokud je nastaven
na socketu "linger interval", tak po jeho zavreni pomoci close() se po
stanovenou dobu nachazi v jakemsi polouzavrenem stavu, ale to je o necem
trochu jinem.)

> Asi nejsem uplne v obraze, ale jestlize server zavrel socket,
> (uvolnil jeho deskriptor), tak stratil moznost z nej cist, cili
> jakykoliv zapis do socketu na strane klienta ma tentyz efekt jako
> zapis do /dev/null - jestli moc blabolim, tak me opravte, ale porad

Jakmile na druhou stranu dojde zprava, ze neni kam psat, vyvola kazdy
pokus o zapis chybu "broken pipe" (EPIPE nebo SIGPIPE).

> jeste nevim, jak na strane klienta detekovat, jestli server uz socket
> zavrel a klient ho ma zavrit taky, nebo ma jeste cekat nejaka data,
> cili pokouset se o read() .

read() ze socketu vrati nulu POUZE a JEDINE, pokud druha strana provedla
shutdown() s druhym parametrem majicim hodnotu 1 nebo 2 pripadne close()
a VSECHNA zaslana data jiz byla prectena. Pokud by se to nahodou chovalo
jinak, pak je to CHYBA.

--Pavel Kankovsky aka Peak   [ Boycott Microsoft -- http://www.vcnet.com/bms ]



Další informace o konferenci Linux