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