X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=df4edd3606f0d90ae1faaf3bf07415e2ed50d558;hb=acf26488adcdf8852419818897405d10f895e16a;hp=b64318ff19c01d68f6d5312403493d056a81c1bf;hpb=3e1e7b56903a67dde9ea8ecebbc507fcf9bbb402;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index b64318ff..df4edd36 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -136,8 +136,8 @@ sub _on_connect undef $conn->{sock}; my $sock = $conn->{sock} = Mojo::IOLoop::Stream->new($handle); $sock->on(read => sub {$conn->_rcv($_[1]);} ); - $sock->on(error => sub {$conn->disconnect;}); - $sock->on(close => sub {$conn->disconnect;}); + $sock->on(error => sub {delete $conn->{sock}; $conn->disconnect;}); + $sock->on(close => sub {delete $conn->{sock}; $conn->disconnect;}); $sock->timeout(0); $sock->start; $conn->{peerhost} = eval { $handle->peerhost; }; @@ -278,6 +278,9 @@ sub _send_stuff my $conn = shift; my $rq = $conn->{outqueue}; my $sock = $conn->{sock}; + return unless defined $sock; + return if $conn->{disconnecting}; + while (@$rq) { my $data = shift @$rq; my $lth = length $data; @@ -289,7 +292,7 @@ sub _send_stuff } if (defined $sock) { $sock->write($data); - $total_out = $lth; + $total_out += $lth; } else { dbg("_send_stuff $call ending data ignored: $data"); } @@ -377,6 +380,9 @@ sub _rcv { # Complement to _send my $msg = shift; my $sock = $conn->{sock}; return unless defined($sock); + return if $conn->{disconnecting}; + + $total_in += length $msg; my @lines; if (isdbg('raw')) {