X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=d44d4f4f5ea0d25d5d6b32d80fa78b2657cb2c15;hb=955a8e00260e9f91e7f1c932771c39fa78394cdb;hp=352904102e32cf35d183ffcd1395e42f5c9c87a0;hpb=0702d383db04a014535eb7cba323da7e763e219d;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index 35290410..d44d4f4f 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -61,11 +61,12 @@ sub set_error $conn->{eproc} = $callback; } -sub set_eof +sub set_on_eof { my $conn = shift; my $callback = shift; - $conn->{sock}->on_eof(sub {$callback}); + $conn->{sock}->on_eof($callback); + $conn->{sock}->on_error($callback); } sub set_rproc @@ -233,9 +234,14 @@ sub disconnect } } - if (defined($sock)) { + if (ref $sock && $sock->isa('AnyEvent::Handle') && exists $sock->{fh}) { shutdown($sock->{fh}, 2); $sock->destroy; + } else { + my $s; + $s = "already destroyed" unless exists $sock->{fh}; + $s ||= ref $sock || $sock || "undefined"; + dbg("Msg::disconnect trying to disconnect a $s socket") if isdbg('chan'); } unless ($main::is_win) { @@ -407,12 +413,12 @@ sub new_client { my ($rproc, $eproc) = &{$server_conn->{rproc}} ($conn, $conn->{peerhost} = $peerhost, $conn->{peerport} = $peerport); dbg("accept $conn->{cnum} from $conn->{peerhost} $conn->{peerport}") if isdbg('connll'); $conn->{sort} = 'Incoming'; + $conn->{sock}->on_read(sub {$conn->_rcv}); if ($eproc) { $conn->{eproc} = $eproc; } if ($rproc) { $conn->{rproc} = $rproc; - $conn->{sock}->on_read(sub {$conn->_rcv}); } else { # Login failed &{$conn->{eproc}}($conn, undef) if exists $conn->{eproc}; $conn->disconnect();