summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/IO/Select.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/IO/Select.pm')
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Select.pm16
1 files changed, 11 insertions, 5 deletions
diff --git a/Master/tlpkg/tlperl/lib/IO/Select.pm b/Master/tlpkg/tlperl/lib/IO/Select.pm
index fc05fe70e9c..14b9797a957 100644
--- a/Master/tlpkg/tlperl/lib/IO/Select.pm
+++ b/Master/tlpkg/tlperl/lib/IO/Select.pm
@@ -11,7 +11,7 @@ use warnings::register;
use vars qw($VERSION @ISA);
require Exporter;
-$VERSION = "1.17";
+$VERSION = "1.20";
@ISA = qw(Exporter); # This is only so we can do version checking
@@ -74,9 +74,9 @@ sub _update
foreach $f (@_)
{
my $fn = $vec->_fileno($f);
- next unless defined $fn;
- my $i = $fn + FIRST_FD;
if ($add) {
+ next unless defined $fn;
+ my $i = $fn + FIRST_FD;
if (defined $vec->[$i]) {
$vec->[$i] = $f; # if array rest might be different, so we update
next;
@@ -85,6 +85,12 @@ sub _update
vec($bits, $fn, 1) = 1;
$vec->[$i] = $f;
} else { # remove
+ if ( ! defined $fn ) { # remove if fileno undef'd
+ defined($_) && $_ == $f and do { $vec->[FD_COUNT]--; $_ = undef; }
+ for @{$vec}[FIRST_FD .. $#$vec];
+ next;
+ }
+ my $i = $fn + FIRST_FD;
next unless defined $vec->[$i];
$vec->[FD_COUNT]--;
vec($bits, $fn, 1) = 0;
@@ -346,8 +352,8 @@ listening for more connections on a listen socket
use IO::Select;
use IO::Socket;
- $lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080);
- $sel = new IO::Select( $lsn );
+ $lsn = IO::Socket::INET->new(Listen => 1, LocalPort => 8080);
+ $sel = IO::Select->new( $lsn );
while(@ready = $sel->can_read) {
foreach $fh (@ready) {