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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.