Hongli Lai wrote:
> Roger Pack wrote:
>> I used to catch Errno::EINVAL when using lots of open file descriptors
>> and [ruby] threads on win32 [and probably still would except I went
>> single threaded and switched to Linux to side step the problem].
>> Never figured it out.  Sometimes sockets would 'read' one another's
>> data, too, and sometimes a close on one socket would close another
>> different socket.  I assume yours works splendidly with the normal
>> memory allocator?
> 
> This sounds like an obvious case of double closing file descriptors. 
> File descriptor numbers on many operating systems are "recycled", e.g.:
> 
> int fd1, fd2, fd3;
> fd1 = open(...);    // fd1 == 3
> fd2 = open(...);    // fd2 == 4;
> close(fd1);
> fd3 = open(...);    // fd3 == 3, 3 has been "recycled"
> 
> If you call close(fd1) at the end (double closing) then it would wrongly 
> close fd3.
> 
> Issues like these are pretty serious. Maybe there's a double closing bug 
> in Ruby somewhere.
> 

Anyone have a dtrace script (for OS X) that I could use to track socket 
opens and closes?  I'm trying to track this issue down and haven't been 
successful yet.