X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;ds=inline;f=perl%2FMsg.pm;h=fc1179c5828aec64d280f0ec94ca84e91a77b2cd;hb=281b5d6baba694aa7b99be87a7be46a59ed0bd6c;hp=4bc31faddfcf92546427549c4a0f81d5e39f45c8;hpb=bbc51ffb416a39a421b6054d1cb57af330ab68f1;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index 4bc31fad..fc1179c5 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -61,6 +61,14 @@ sub set_error $conn->{eproc} = $callback; } +sub set_on_eof +{ + my $conn = shift; + my $callback = shift; + $conn->{sock}->on_eof($callback); + $conn->{sock}->on_error($callback); +} + sub set_rproc { my $conn = shift; @@ -134,7 +142,7 @@ sub connect { connect => [$to_host, $to_port], -# on_connect => sub {my $h = shift; $conn->{peerhost} = $h->handle->peername;}, + on_connect => sub {my $h = shift; $conn->{peerhost} = shift;}, on_eof => sub {$conn->disconnect}, @@ -226,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) { @@ -303,7 +316,7 @@ sub new_server { my ($pkg, $my_host, $my_port, $login_proc) = @_; my $self = $pkg->new($login_proc); - $self->{sock} = tcp_server $my_host, $my_port, sub { $self->new_client(@_); }, sub { return 256; }; + $self->{sock} = tcp_server $my_host, $my_port, sub { $self->new_client(@_); }; die "Could not create socket: $! \n" unless $self->{sock}; return $self; } @@ -400,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(); @@ -459,6 +472,12 @@ sub set_event_handler dbg("Msg::set_event_handler called from ${pkg}::${fn} line $line doing $s"); } +sub echo +{ + my $conn = shift; + return defined $_[0] ? $conn->{echo} = $_[0] : $_[0]; +} + sub DESTROY { my $conn = shift;