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