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