X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=perl%2FMsg.pm;h=3b96c812e502b51b16f5b6a493cbae14aa3e4822;hb=c9768e5afacacc3dd4004a35aeef2a2e54865177;hp=815937963962169d8fb2e4d8e0808cb8675bc2a4;hpb=3f64c5686df118fa3f3a1d66a87f25b89eb1732a;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index 81593796..3b96c812 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -16,7 +16,7 @@ use IO::Socket; use DXDebug; use Timer; -use vars qw(%rd_callbacks %wt_callbacks %er_callbacks $rd_handles $wt_handles $er_handles $now %conns $noconns $blocking_supported); +use vars qw(%rd_callbacks %wt_callbacks %er_callbacks $rd_handles $wt_handles $er_handles $now %conns $noconns $blocking_supported $cnum); %rd_callbacks = (); %wt_callbacks = (); @@ -33,11 +33,11 @@ BEGIN { require POSIX; POSIX->import(qw(O_NONBLOCK F_SETFL F_GETFL)) }; if ($@ || $main::is_win) { - print STDERR "POSIX Blocking *** NOT *** supported $@\n"; +# print STDERR "POSIX Blocking *** NOT *** supported $@\n"; $blocking_supported = 0; } else { $blocking_supported = 1; - print STDERR "POSIX Blocking enabled\n"; +# print STDERR "POSIX Blocking enabled\n"; } @@ -53,6 +53,8 @@ my $eagain = eval {EAGAIN()}; my $einprogress = eval {EINPROGRESS()}; my $ewouldblock = eval {EWOULDBLOCK()}; $^W = $w; +$cnum = 0; + # #----------------------------------------------------------------- @@ -73,9 +75,11 @@ sub new csort => 'telnet', timeval => 60, blocking => 0, - cnum => ++$noconns, + cnum => (($cnum < 999) ? (++$cnum) : ($cnum = 1)), }; + $noconns++; + dbg('connll', "Connection created ($noconns)"); return bless $conn, $class; } @@ -118,7 +122,8 @@ sub conns if (ref $pkg) { $call = $pkg->{call} unless $call; return undef unless $call; - confess "changing $pkg->{call} to $call" if exists $pkg->{call} && $call ne $pkg->{call}; + dbg('connll', "changing $pkg->{call} to $call") if exists $pkg->{call} && $call ne $pkg->{call}; + delete $conns{$pkg->{call}} if exists $pkg->{call} && exists $conns{$pkg->{call}} && $pkg->{call} ne $call; $pkg->{call} = $call; $ref = $conns{$call} = $pkg; dbg('connll', "Connection $pkg->{cnum} $call stored"); @@ -134,9 +139,9 @@ sub pid_gone my ($pkg, $pid) = @_; my @pid = grep {$_->{pid} == $pid} values %conns; - for (@pid) { - &{$_->{eproc}}($_, "$pid has gorn") if exists $_->{eproc}; - $_->disconnect; + foreach my $p (@pid) { + &{$p->{eproc}}($p, "$pid has gorn") if exists $p->{eproc}; + $p->disconnect; } } @@ -436,8 +441,8 @@ sub close_server # close all clients (this is for forking really) sub close_all_clients { - for (values %conns) { - $_->disconnect; + foreach my $conn (values %conns) { + $conn->disconnect; } }