X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=0e6ee9661c07abd36053f5a1ef1032db739f1d43;hb=5c4606e6c15b6518eadf808cb1a6c6cf67caf46b;hp=d1f2589b0aabb58d96af1d44a7b6f6b51d459bdf;hpb=f27e9460a85b5ba3ec8b51d14808220023b70917;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index d1f2589b..0e6ee966 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -73,9 +73,9 @@ sub new csort => 'telnet', timeval => 60, blocking => 0, + cnum => ++$noconns, }; - $noconns++; dbg('connll', "Connection created ($noconns)"); return bless $conn, $class; } @@ -118,10 +118,11 @@ 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 $pkg->{call} ne $call; $pkg->{call} = $call; $ref = $conns{$call} = $pkg; - dbg('connll', "Connection $call stored"); + dbg('connll', "Connection $pkg->{cnum} $call stored"); } else { $ref = $conns{$call}; } @@ -134,9 +135,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; } } @@ -194,7 +195,7 @@ sub disconnect { delete $conns{$call} if $ref && $ref == $conn; } $call ||= 'unallocated'; - dbg('connll', "Connection $call disconnected"); + dbg('connll', "Connection $conn->{cnum} $call disconnected"); unless ($main::is_win) { kill 'TERM', $conn->{pid} if exists $conn->{pid}; @@ -272,7 +273,10 @@ sub _send { $conn->disconnect; return 0; # fail. Message remains in queue .. } - } + } elsif (isdbg('raw')) { + my $call = $conn->{call} || 'none'; + dbgdump('raw', "$call send $bytes_written: ", $msg); + } $offset += $bytes_written; $bytes_to_write -= $bytes_written; } @@ -374,6 +378,10 @@ sub _rcv { # Complement to _send if (defined ($bytes_read)) { if ($bytes_read > 0) { $conn->{msg} .= $msg; + if (isdbg('raw')) { + my $call = $conn->{call} || 'none'; + dbgdump('raw', "$call read $bytes_read: ", $msg); + } } } else { if (_err_will_block($!)) { @@ -429,8 +437,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; } } @@ -515,7 +523,9 @@ sub DESTROY { my $conn = shift; my $call = $conn->{call} || 'unallocated'; - dbg('connll', "Connection $call being destroyed ($noconns)"); + my $host = $conn->{peerhost} || ''; + my $port = $conn->{peerport} || ''; + dbg('connll', "Connection $conn->{cnum} $call [$host $port] being destroyed"); $noconns--; }