which is never if you already have a child, sending this into an endless loop. If you have client 1, and client 2 exits, the parent goes into this code, but waitpid will not return -1 (as client 1 is still there). This loop will only stop spinning once all clients are dead - which is exactly what you observe.1 until (-1 == waitpid(-1, WNOHANG));
You should just call waitpid, which will block until the child has delivered its status, but that is no problem as you are in your SIGCHLD handler, so a child has died per definition:
Judging by your code, you seem to want to avoid the parent blocking in the waitpid call, but as you waitpid() in the dead child signal handler, blocking will not happen. Ironically, by trying to avoid blocking, you send your server in an endless loop, thus blocking it :).sub reap { waitpid(-1); return $?; }
CU
Robartes-
In reply to Re: Socket question Help!
by robartes
in thread Socket question Help!
by drake50
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |