X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=3e30372ff1111bbac4923b6837c5a01618d8d620;hb=c8a6bc3e45bfbbaad776f4a6f22b3e501c8fc1c9;hp=aa9993e7ff966bf2b15ae5d3dc9782e96a421271;hpb=f47c97d80722ed7d1881afa7caa0e8d24b6b0a75;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index aa9993e7..3e30372f 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; @@ -146,7 +146,7 @@ sub _on_connect $sock->timeout(0); $sock->start; $conn->{peerhost} = eval { $handle->peerhost; }; - dbg((ref $conn) . " connected $conn->{cnum} to $conn->{peerhost}:$conn->{peerport}") if isdbg('connll'); + dbg((ref $conn) . " connected $conn->{cnum} to $conn->{peerhost}:$conn->{peerport}") if isdbg('conn') || isdbg ('connect'); if ($conn->{on_connect}) { &{$conn->{on_connect}}($conn, $handle); } @@ -257,7 +257,7 @@ sub disconnect my ($pkg, $fn, $line) = caller if $dbg; if ($count >= 2) { - dbg((ref $conn) . "::disconnect on call $conn->{call} attempt $conn->{disconnecting} called from ${pkg}::${fn} line $line FORCING CLOSE ") if $dbg; + dbgtrace((ref $conn) . "::disconnect on call $conn->{call} attempt $conn->{disconnecting} called from ${pkg}::${fn} line $line FORCING CLOSE ") if $dbg; _close_it($conn); return; } @@ -276,14 +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); } - _close_it($conn); } else { dbg((ref $conn) . " socket missing on $conn->{call}") if $dbg; _close_it($conn); @@ -343,9 +345,7 @@ sub _send_stuff my $lth = length $data; my $call = $conn->{call} || 'none'; if (isdbg('raw')) { - if (isdbg('raw')) { - dbgdump('raw', "$call send $lth: ", $lth); - } + dbgdump('raw', "$call send $lth:", $data); } if (defined $sock) { $sock->write($data); @@ -480,10 +480,10 @@ sub new_client { $sock->on(read => sub {$conn->_rcv($_[1])}); $sock->timeout(0); $sock->start; - $conn->{peerhost} = $handle->peerhost; + $conn->{peerhost} = $handle->peerhost || 'unknown'; $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'); + $conn->{peerport} = $handle->peerport || 0; + dbg((ref $conn) . " accept $conn->{cnum} from $conn->{peerhost}:$conn->{peerport}") if isdbg('conn') || isdbg('connect'); my ($rproc, $eproc) = &{$server_conn->{rproc}} ($conn, $conn->{peerhost}, $conn->{peerport}); $conn->{sort} = 'Incoming'; if ($eproc) { @@ -551,8 +551,7 @@ sub DESTROY if (isdbg('connll')) { my ($pkg, $fn, $line) = caller; - dbg((ref $conn) . "::DESTROY on call $call called from ${pkg}::${fn} line $line "); - + dbgtrace((ref $conn) . "::DESTROY on call $call called from ${pkg}::${fn} line $line "); } my $call = $conn->{call} || 'unallocated';