linux-l: ERESTARTSYS und accpet()-Problem

Oliver Hillmann ohil at tequila.in-berlin.de
Mi Nov 11 12:11:25 CET 1998


Hallo,

bei einem Progrämmchen hier beobachte ich ein mir völlig unverständliches
Verhalten. Es handelt sich um soetwas wie einen Chat-Server, der auf einem
Port auf einen connect wartet (mittels accept()), daraufhin dann einen
neuen Thread started (benutzt libpthread), um die Verbindung zu bedienen.

strace dokumentiert dies in der Regel mit

accept(3, {sin_family=AF_INET, sin_port=htons(1463),
sin_addr=inet_addr("127.0.0.1")}, [16]) = 20

und die Welt ist in Ordnung, bis irgendwann mal folgendes passiert:

accept(3, 0xbffffd40, [16])             = ? ERESTARTSYS (To be restarted)
--- SIGPIPE (Broken pipe) ---
+++ killed by SIGPIPE +++

Der accept()-Call in Programm sieht so aus:

newsockfd=accept(sockfd,(struct sockaddr *)&cli_addr,&clilen);

und cli_addr wird nach der Initialisierung auch nicht verändert...

Hat irgendwer ne Idee, warum sich plötzlich und unerwartet accept() so
anders verhält, und was ERESTARTSYS mir sagen möchte...

Danke, Danke, Danke :)

Oli
-- 
Oliver Hillmann, Berlin (Germany) <ohil at tequila.in-berlin.de>




Mehr Informationen über die Mailingliste linux-l