cteni ze socketu

Ales Horak ales na rupnw.upol.cz
Středa Listopad 13 16:36:06 CET 2002


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.
 
jo - jeste verze gcc je 3.2 (RedHat 8.0)



--
           Ales Horak
           Palacky University Library Sys_admin(void:)
           http://lib.upol.cz/cgi-bin/k6
           
Linux is like teepee. No windows, no gates, Apache inside...


Další informace o konferenci Linux