X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=ec07d61da6878851f6b8f11f19aba403e5729cbd;hb=4398f80612fe9b55fbbc3e62be7c03ffa59a9f2b;hp=f925681841c0746e44b7e7ee0d65b31d11a9c20c;hpb=f9ee7af6576291eb5e60f5683b31f5a9b32bd986;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index f9256818..ec07d61d 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -283,6 +283,22 @@ sub _send { 1; # Success } +sub dup_sock +{ + my $conn = shift; + my $oldsock = $conn->{sock}; + my $rc = $rd_callbacks{$oldsock}; + my $wc = $wt_callbacks{$oldsock}; + my $ec = $er_callbacks{$oldsock}; + my $sock = $oldsock->new_from_fd($oldsock, "w+"); + if ($sock) { + set_event_handler($oldsock, read=>undef, write=>undef, error=>undef); + $conn->{sock} = $sock; + set_event_handler($sock, read=>$rc, write=>$wc, error=>$ec); + $oldsock->close; + } +} + sub _err_will_block { return 0 unless $blocking_supported; return ($_[0] == $eagain || $_[0] == $ewouldblock || $_[0] == $einprogress);