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