X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=3c4b51f3d0d2504adff8ccaf7bd61781bf6163f9;hb=6e7d6f8695b2e3de7a7878fd23eb52ea22f0b875;hp=b355845d1196ebccb13fbfa0636f996bc40e7050;hpb=fc8f1ff871c72c96e597c2d2ded8f7028eb7196f;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index b355845d..3c4b51f3 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -28,7 +28,7 @@ $now = time; $cnum = 0; $connect_timeout = 5; -$disc_waittime = 3; +$disc_waittime = 1.5; our %delqueue; @@ -276,31 +276,16 @@ sub disconnect $delqueue{$conn} = $conn; # save this connection until everything is finished my $sock = $conn->{sock}; if ($sock) { - - # remove me from the active list - my $call; - if ($call = $conn->{call}) { - my $ref = $conns{$call}; - delete $conns{$call} if $ref && $ref == $conn; + if ($sock->{buffer}) { + my $lth = length $sock->{buffer}; + Mojo::IOLoop->timer($disc_waittime, sub { + dbg("Buffer contained $lth characters, coordinated for $disc_waittime secs, now disconnecting $call") if $dbg; + _close_it($conn); + }); + } else { + dbg("Buffer empty, just close $call") if $dbg; + _close_it($conn); } - - $conn->{delay} = Mojo::IOLoop->delay ( -# Mojo::IOLoop->delay ( - sub { - my $delay = shift; - dbg("before drain $call") if $dbg; - $sock->on(drain => $delay->begin); - 1; - }, - sub { - my $delay = shift; - dbg("before _close_it $call") if $dbg; - _close_it($conn); - 1; - } - ); - $conn->{delay}->wait; - } else { dbg((ref $conn) . " socket missing on $conn->{call}") if $dbg; _close_it($conn); @@ -498,6 +483,7 @@ sub new_client { $sock->timeout(0); $sock->start; $conn->{peerhost} = $handle->peerhost; + $conn->{peerhost} =~ s|^::ffff:||; # chop off leading pseudo IPV6 stuff on dual stack listeners $conn->{peerport} = $handle->peerport; dbg((ref $conn) . " accept $conn->{cnum} from $conn->{peerhost}:$conn->{peerport}") if isdbg('connll'); my ($rproc, $eproc) = &{$server_conn->{rproc}} ($conn, $conn->{peerhost}, $conn->{peerport});