Sitove programovani
David Rohleder
davro na ics.muni.cz
Středa Duben 8 19:57:42 CEST 1998
ALES na rupnw.upol.cz (Ales Horak) writes:
> > Pokud server na socket pustil close, tak spojeni jeste nemuselo
> > zaniknout, ale muze byt jenom polouzavrene (tj. zavrene jenom v jednom
> > smeru).
>
> 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
> 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() .
>
> --
>
Ve chvili, kdy pouzijete read() a vrati se 0, tak je spojeni
uzavreno. Pokud je spojeni jeste otevrene, tak se proste ten read
zablokuje a ceka az mu dojde dostatecne mnozstvi dat (pokud nekdy
uprostred server uzavre spojeni, tak read() vrati pocet prenesenych
bytu). Cili pokud pozadovany objem != ziskany objem, tak server s
nejvetsi pravdepodobnosti uzavrel spojeni. (Netyka se neblokujiciho
cteni)
Takze to, ze server uzavrel spojeni vypada asi takto:
if ((ziskany_pocet=read(fd,buffer,pozadovany_pocet))!=pozadovany_pocet) {
printf("server uzavrel spojeni");
.... delej co chces ....
} else {
neco jineho;
}
> Ales Horak
> ___________________________________________________________________
> Palacky University Library
> sys_admin();
> http://tin.upol.cz/
>
-------------------------------------------------------------------------
David Rohleder davro na ics.muni.cz
Institute of Computer Science, Masaryk University
Brno, Czech Republic
-------------------------------------------------------------------------
Další informace o konferenci Linux