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