select

Stanislav Meduna stanom na etm.at
Úterý Leden 30 12:31:22 CET 2001


Pavel West schrieb in Nachricht <3A769980.47C3B298 na idp.cz>...

>Vytvarim program, ktery bude komunikovat pomoci socketu s vice clienty
>...
>program by uviznul ve volani write a pokud by tam byl dalsi

Neviem ci presne chapem, co chcete, ale podobne problemy
sa riesia tak, ze su V/V operacie neblokujuce, teda
aj ten write. Pokial vam select vrati deskriptor ako ready
pre citanie/zapis, mate zarucene, ze pojde precitat/zapisat
aspon jeden byte (modulo specialne pripady ako rozpadnute
spojenie, accept-ovany connect a.p.). Takze kludne zavolajte
nonblocking read/write, len si nezabudnite osetrit, kolko
byte sa naozaj podarilo preniest (nebude to vzdy cely
buffer).

>Vim ze by se to dalo obejit pomoci implementace konkurentniho serveru,
>tj. pokazde udelat fork a obsluhovat klienty v jinem nezavislem procesu,
>ale ja bych to chtel jako iterativni server. Jde to vubec ?

Samozrejme - jeden taky system mam prave pred sebou :-)


>Ted me napada ze ten select pro socket ceka jen na vytvoreni spojeni z
>druhe strany, a potom uz povazuje socket za schopny provozu a proto
>odblokuje ten proces pro zapis,ze ?


Vytvorenie spojenia je zase o niecom inom. Pokial potrebujete
robit non-blocking connect(), je to trochu zlozitejsie.

Dobra linka k socketom aj s prikladmi je na
http://www-db.stanford.edu/~cho/programming/unix-socket-faq.html

Zdravi
--
                                                   Stano





Další informace o konferenci Linux