cteni ze socketu
Matthes
ornest na mistral.cz
Středa Listopad 13 16:51:28 CET 2002
No a nemela by se ta podminka if(timeout_flag==1) testovat pred volanim
read? Pokud ten znak uz nechcete dale zpracovavat, nepotrebujete jej ani
cist a smyska se ukonci jeste pred jeho nactenim. Ale nevim, co presne
potrebujete...
Matthes
On Wed, 2002-11-13 at 16:36, Ales Horak wrote:
> Dobry den, po dvoudenim vycerpavajicim zapasu s man strankami a ruznymi
> chytrymi knizkami mi dochazi stava a zkousim to zde:
>
> Ctu ze socketu po jednom bajtu v nekonecne smycce. Nevim kolik toho mam
> precist, takze mam nastaveny SIGALRM za 5s
> vypada to asi takhle:
>
> ...
> signal(SIGALRM, alarm_handler);
> timeout_flag=0;
> alarm(5);
> while(1)
> {
> read(sockd, &znak, 1);
> if(timeout_flag==1)break;
> /* tady je par nedulezitych radku, kde se precteny znak nejak
> zpracovava */
> }
> alarm(0);
> ...
> funkce alarm_handler() pouze zmeni hodnotu globalni promenne timeout_flag
> z 0 na 1.
>
> Ten alarm prokazatelne probehne (hodnota timeout_flag se po 5s opravdu
> zmeni), ale po ukonceni funkce alarm_handler se rizeni vrati zpet k read(),
> misto, aby pokracovalo na dalsim radku "if(timeout_flag==..."
> takze program zustane navzdy zablokovan funkci read() (pote co do socketu z
> druhe strany uz nic dalsiho neprichazi.
> Co delam blbe ?
> Diky za kazde nakopnuti spravnym smerem.
>
>
Další informace o konferenci Linux