From: Joseph McDonald Date: 2001-06-23T05:08:58+09:00 Subject: [ruby-talk:16779] Re: socket bug Thursday, June 21, 2001, 10:13:43 PM, you wrote: >> I added that and also added a close to the client side, but I still >> get this error: >> >> server: >> ./socketbug.rb:6:in `wait': No child processes (Errno::ECHILD) >> from ./socketbug.rb:6 >> from ./socketbug.rb:5:in `call' >> from ./socketbug.rb:11 >> >> It seems to happen randomly, but maybe every 500 or so requests? >> Any idea what causes it? PB> If you do this: PB> trap("CLD") do PB> Process.wait PB> end PB> 50.times do PB> if !fork() then PB> exit PB> end PB> end PB> sleep 10 PB> you should see the same result. According to the wait(2) man page, wait PB> can return ECHILD if there are no unwaited-for child processes. I'm not Thanks, that helped a lot. This seems to do the trick: trap("CHLD", "SIG_IGN") It runs great on Linux, very fast. Not so fast on FreeBSD 4.3. I notice on FreeBSD with netstat -m the mbufs gets to around 2548 in use and then the process hangs for about 20 seconds, then it starts again, mbufs start to decrease and then start to increase, when it hits 2548 again, it hangs again and over and over... % netstat -m 2548/2640/7168 mbufs in use (current/peak/max): 131 mbufs allocated to data 2417 mbufs allocated to packet headers 128/390/1792 mbuf clusters in use (current/peak/max) 1440 Kbytes allocated to network (26% of mb_map in use) 0 requests for memory denied 0 requests for memory delayed 0 calls to protocol drain routines I think this may be a FreeBSD problem, not a ruby problem. Perhaps Brian Feldman can shed some light on the subject. thanks, -joe