linux-l: ERESTARTSYS und accpet()-Problem

Oliver Hillmann oliver.hillmann at charite.de
Do Nov 12 16:07:38 CET 1998


> > [..]
> ERESTARTSYS bedeutet, das der accept call durch ein signal
> unterbrochen wurde, zum Beispiel einen ALARM. Du musst deinen
> accept-call einfach in eine Schleife a'la
> 
> while ((newsockfd=accept(sockfd,(struct sockaddr *)&cli_addr,&clilen))==-1 **
>        errno==ERESTARTSYS);

Keine schlechte Idee, allerdings bricht accept() - trotz sighandling 
- mit einer Broken Pipe desoefteren ab... :-\
 
> packen. Wenns dann 'ne Endlosschleife gibt hast du natuerlich ein
> Problem :-) Koennte es sein dass die verwendung von threads irgendwelche
> signale erzeugt?

Das *kann* allerdings sein, wenn ich mir den strace dump so 
angucke... Vielleicht liegts daran? Koennte evtl. auch das sporadische 
Auftreten erklaeren... Guter Tip, danke! :)
 
> Da faellt mir ein, es gibt wohl auch noch 'ne andere moeglichkeit: Du
> musst deine signal-handler mit sigaction einrichten und das SA_RESTART
> flag setzen. Dann passiert das wohl automatisch (der restart des
> sys-calls). 

Guck ich mir auch mal an, danke.
 
> Irgend wo im libc-Manual habe ich dazu mal was gelesen ... frag mich
> bitte nix genaueres mehr, ist schon 'ne weile her

Okay... :)

Danke & Gruesschen

Oli 
-- 
Oliver Hillmann, Berlin (Germany) <oliver.hillmann at charite.de>



Mehr Informationen über die Mailingliste linux-l