Problem s FIFO (mirne OT)

Michal Krause mike na navrcholu.cz
Neděle Červen 6 20:49:58 CEST 1999


Zdravim,

mam demona, se kterym komunikuji CGI scripty pres FIFO. Jak znamo, operace s
FIFO jsou blocking a to tak, ze se blokuje i open(), dokud nekdo neotevre
"druhou stranu". 

Muj problem spociva v tom, ze onen demon pouziva MySQL. Stalo se mi, ze MySQL
spadlo a demon se v dusledku toho restartuje. Dokud vsak MySQL nebezi, demon
nezacne odebirat data z FIFA. No a protoze tech CGIcek, ktere se snazi o
konexi je moc a neukoncuji se (diky bloknuti v open()), behem par vterin to
posle server do vecnych lovist.

Takze otazka zni: lze nejak dosahnout napriklad timeoutu ve volani open()?
Funkce select() samozrejme pouzit nejde, protoze jeste nemam file descriptor.
Nebo by mel nekdo nejakou jinou ideu, jak to resit?

Mozna by sla pouzit konstrukce

while (cnt++ < 10)
{
    if ((fd = open(fifo, O_WRONLY | O_NONBLOCK)) == -1)
        sleep(1);
    else
        break;
}
if (fd != -1)
[snip]

ale mam strach, ze pri tom mnozstvi spoustenych CGIcek by se takhle zbytecne
na nektere nedostalo i v normalnim provozu. Sice by asi slo misto sleep()
pouzit usleep() a zkouset to casteji, ale stejne...

Mel by nekdo nejaky napad?

Diky

Michal Krause                                                      /\
ICQ: 7665279            Informace (nejenom) ze sveta Linuxu     /\/  \
email: mike na navrcholu.cz ______ http://www.root.cz/ ______ NAVRCHOLU.cz

There are three kinds of lies: lies, damn lies, and benchmarks.
                                                         Jeremy Allison


Další informace o konferenci Linux