socket programming (BSD like)

Richard Willmann mailinglists na nocomment.sk
Středa Únor 6 16:38:06 CET 2002


> Ak sa nemylim, read vrati co ma. Write ale urcite moze a bude blokovat,
> pokial sa don budete snazit natlacit viac dat, na kolko je miesto.

no precital som si este raz (dokladne:) manualove stranky ... a zhrnul by
som to asi takto:

* volanie read(socket, data, datalen) blokuje po dobu SO_RCVTIMEO v pripade
ak v jadre nie je min(SO_RCVLOWAT, datalen) dat a soket je neblokujuci a
vrati vsetko co ma. V pripade ze vrati nulu, je to priznak EOF.
* select oznaci socket za readable ak je v jadre aspon SO_RCVLOWAT dat alebo
je EOF

* volanie write(socket, data, datal) blokuje po dobu SO_RCVTIMEO kym
nespracuje tolko "kolko uzna za vhodne" a vrati tolko kolko zapisal.
* select oznaci socket za writeable ak je mozne spracovat bez blokovania
aspon SO_SNDLOWAT dat.

spravne?


> a blokovanie vam vadi (ci uz z dovodu, ze obsluhujete viac klientov,
> alebo z dovodu, ze sucasne pisete aj cakate odpoved a bojite sa
> deadlocku), pravidlom je pouzit nonblocking sockety. Pokial ide len
ani jedno ani druhe, chcem definovat timeout pre celu "session" res. vymenu
dat a nemozem pouzit signaly. je to v perli a signaly nie su na win32
podporovane.

> o prenos dat, s pouzitim nie su problemy. Pokial robite aj non-blocking
> connect, to uz je trochu seda oblast, kde sa rozne systemy chovaju
> rozne.
ano, to som sa uz niekde docital ze s neblokujucim connectom su problemy ...


diki moc

rwi



Další informace o konferenci Linux