linux-l: ERESTARTSYS und accpet()-Problem
Stefan Bund
bund at zedat.fu-berlin.de
Do Nov 12 10:08:01 CET 1998
ohil at tequila.in-berlin.de (Oliver Hillmann) writes:
> Hat irgendwer ne Idee, warum sich plötzlich und unerwartet accept() so
> anders verhält, und was ERESTARTSYS mir sagen möchte...
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);
packen. Wenns dann 'ne Endlosschleife gibt hast du natürlich ein
Problem :-) Könnte es sein daß die verwendung von threads irgendwelche
signale erzeugt?
Da fällt mir ein, es gibt wohl auch noch 'ne andere möglichkeit: Du
mußt deine signal-handler mit sigaction einrichten und das SA_RESTART
flag setzen. Dann passiert das wohl automatisch (der restart des
sys-calls).
Irgend wo im libc-Manual habe ich dazu mal was gelesen ... frag mich
bitte nix genaueres mehr, ist schon 'ne weile her
Stefan.
Mehr Informationen über die Mailingliste linux-l