X-Git-Url: http://scm.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=df4edd3606f0d90ae1faaf3bf07415e2ed50d558;hb=c6a62ff483f8887b4157e111a405fef971ade8d9;hp=ba0e6b8eadf520d92f78ecde2219ae49bc903a1d;hpb=601ea9fb47810209aeedef1a3041df5a916964f3;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index ba0e6b8e..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; @@ -377,6 +380,7 @@ sub _rcv { # Complement to _send my $msg = shift; my $sock = $conn->{sock}; return unless defined($sock); + return if $conn->{disconnecting}; $total_in += length $msg;