X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=1f0da5f44cbf0d4b6c0ccff9e0f15753303b0f8c;hb=0ce79a125db0acb043fceaa641d8b3a9eae71a41;hp=fadab099783cd36d42463cbb932910a515e399c1;hpb=7312707b4a2412cb690a351dfc07dc144f0937e4;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index fadab099..1f0da5f4 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -143,7 +143,7 @@ sub _on_connect $conn->{peerhost} = eval { $handle->peerhost; }; dbg((ref $conn) . " connected $conn->{cnum} to $conn->{peerhost}:$conn->{peerport}") if isdbg('connll'); if ($conn->{on_connect}) { - &{$conn->{on_connect}}($conn); + &{$conn->{on_connect}}($conn, $handle); } } @@ -155,12 +155,13 @@ sub is_connected } sub connect { - my ($pkg, $to_host, $to_port, $rproc, %args) = @_; + my ($pkg, $to_host, $to_port, %args) = @_; my $timeout = delete $args{timeout} || $connect_timeout; # Create a connection end-point object my $conn = $pkg; unless (ref $pkg) { + my $rproc = delete $args{rproc}; $conn = $pkg->new($rproc); } $conn->{peerhost} = $to_host; @@ -172,7 +173,7 @@ sub connect { my $sock; $conn->{sock} = $sock = Mojo::IOLoop::Client->new; $sock->on(connect => sub {$conn->_on_connect($_[1])} ); - $sock->on(error => sub {$conn->disconnect}); + $sock->on(error => sub {&{$conn->{eproc}}($conn, $_[1]) if exists $conn->{eproc}; $conn->disconnect}); $sock->on(close => sub {$conn->disconnect}); # copy any args like on_connect, on_disconnect etc @@ -265,7 +266,7 @@ sub disconnect } if (defined($sock)) { - $sock->close_gracefully; + undef $sock; } unless ($main::is_win) {