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