X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=ad09c85da0f784d98b12634f01ad1a0e421144d5;hb=d2b28488d70d97c2e467cd7c57077024b7241b45;hp=ba0e6b8eadf520d92f78ecde2219ae49bc903a1d;hpb=601ea9fb47810209aeedef1a3041df5a916964f3;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index ba0e6b8e..ad09c85d 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -120,9 +120,11 @@ sub ax25 sub peerhost { my $conn = shift; - $conn->{peerhost} ||= 'ax25' if $conn->ax25; - $conn->{peerhost} ||= $conn->{sock}->handle->peerhost if $conn->{sock}; - $conn->{peerhost} ||= 'UNKNOWN'; + unless ($conn->{peerhost}) { + $conn->{peerhost} ||= 'ax25' if $conn->ax25; + $conn->{peerhost} ||= $conn->{sock}->handle->peerhost if $conn->{sock}; + $conn->{peerhost} ||= 'UNKNOWN'; + } return $conn->{peerhost}; } @@ -136,8 +138,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 +280,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 +382,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;