Znovu FIFO a blokovani v open()
Michal Krause
mike na navrcholu.cz
Úterý Říjen 19 15:16:46 CEST 1999
Zdravim,
vim, ze uz se z toho pomalu stava evergreen, ale potrebuju opet resit
problematiku blocknuti v open() pri otevirani FIFO, na jehoz druhem konci
nikdo neni a stavajici reseni (asi) neni pouzitelne.
Doposud jsem pouzival naprosto bez problemu toto:
sigaction(SIGALRM, ...)
alaram(5)
if (open() == -1)
{
perror("open");
return -1;
}
pokracovani....
To jsem pouzival v CGIckach, ktere pres FIFO komunikovaly s demonem. Ted
to CGI prepisuju jako modul do Apache a tim padem je pouziti signalu pase.
Samozrejme, ze se nabizi moznost udelat to nejak takhle:
while (i++ < 50)
{
if (open(fifo, O_WRONLY|O_NONBLOCK) == -1)
if (errno == ENXIO)
usleep(100);
else
failed
else
v poradku
}
Mam ale strach, ze jednak se nejake konexe netrefi do stavu, kdy demon
zrovna otevira FIFO pro cteni i pres vysokou cetnost pokusu o otevreni pro
zapis a jednak mi vadi, ze i vsechny operace budou non-blocking, coz
komplikuje praci.
Zkratka sikla by se nejaka casovana asynchronni udalost, jina nez signal.
Mel by nekdo nejaky jiny napad?
Nakonec mozna zacnu uvazovat o externim programu, ktery bude periodicky
zkouset FIFO otevrit s nejakym rozumnym timeoutem a pokud se mu to
nepovede, usoudi, ze demon je kaput a zacne sam odebirat a zahazovat
konexe.
Snad by sly pouzit nektere funkce z Apache API, ale zase az tak zbehly v
tom nejsem...
Obecne vzato by to asi nemelo nastat protoze demon se v provozu ukazuje
jako rockstable, ale jeden nikda nevi :(
Napadne nekoho neco?
--
S pozdravem
Michal Krause /\
ICQ: 7665279 Informace (nejenom) ze sveta Linuxu /\/ \
email: mike na navrcholu.cz ______ http://www.root.cz/ ______ NAVRCHOLU.cz
Co napsat do signatury, aby to nikoho nepohorsilo? Snad jedine nejakou
obecne znamou pravdu. Doufam, ze vsichni vite, ze tucnak je bylozrava ryba.
Další informace o konferenci Linux