http://qs321.pair.com?node_id=252087

rr has asked for the wisdom of the Perl Monks concerning the following question:

The following code works correctly IN the debugger, but fails with "Bad file descriptor" when not in the debugger. If I am using a regular IO::Socket::INET object, it works just fine both in and out of the debugger.
$fd = $s->fileno(); vec($rin, $fd, 1) = 1; vec($win, $fd, 1) = 1; $ein = $rin | $win; my $i; while (($nf, $tl) = select(undef, $wout=$win, $eout=$ein, 2)) { $i++; $ti = Time::HiRes::time() - $t0; print STDERR "write select loop count $i $ti\n"; if ($ti >= $f{'-timeout'}) { print STDERR "Timed out writing ($ti) $!\n"; return (-20, {}, "write_timeout", $ti); } if (vec($eout, $fd, 1) == 1) { print STDERR "Got an error while writing $! $@\n"; return (-20, {}, "write_error", $ti); } if (vec($wout, $fd, 1) == 1) { $b = syswrite($s, $msg, $l - $b, $b); $t = $t + $b; last if $t = $l; } }
Am I retarded or is this incredibly weird? The following is what I get from using strace
select(8, NULL, [3 4 5], [3 4 5], {2, 0}) = -1 EBADF (Bad file descrip +tor)
FYI, this is perl5.8 (with ithreads) on both redhat and mandrake I tried with the most recent Net::SSLeay and IO::Socket::SSL from CPAN.

I have verified that the SSL socket is made in both cases (in and out of the debugger) by looking at the output of strace and using the debugging functionality if IO::Socket::SSL.

Thanks for any help

RR