in reply to accept() on non-blocking socket still hangs

if ($cn = accept($sock[$numsocks], FH)) {

Well, @sock is empty here so you are passing undef to accept. In my testing that dies under Unix and blocks silently under Win32 (well, I'm also using different versions of Perl between the two tests, but I just can't imagine this being a Perl or Unix bug so I'm going to blame Win32 even though I have almost no evidence).

Even if @sock had something in it, array indices start at 0 in Perl (not 1) so $sock[$numsocks] is never going to be anything but undef if you keep $numsocks equal to 0+@sock.

        - tye (but my friends call me "Tye")