make write complete
[spider.git] / perl / Msg.pm
index 0e6ee9661c07abd36053f5a1ef1032db739f1d43..ae9c4c28699709a3f34a771d0062568f74323071 100644 (file)
@@ -16,7 +16,7 @@ use IO::Socket;
 use DXDebug;
 use Timer;
 
-use vars qw(%rd_callbacks %wt_callbacks %er_callbacks $rd_handles $wt_handles $er_handles $now %conns $noconns $blocking_supported);
+use vars qw(%rd_callbacks %wt_callbacks %er_callbacks $rd_handles $wt_handles $er_handles $now %conns $noconns $blocking_supported $cnum);
 
 %rd_callbacks = ();
 %wt_callbacks = ();
@@ -33,11 +33,11 @@ BEGIN {
         require POSIX; POSIX->import(qw(O_NONBLOCK F_SETFL F_GETFL))
     };
        if ($@ || $main::is_win) {
-               print STDERR "POSIX Blocking *** NOT *** supported $@\n";
+#              print STDERR "POSIX Blocking *** NOT *** supported $@\n";
                $blocking_supported = 0;
        } else {
                $blocking_supported = 1;
-               print STDERR "POSIX Blocking enabled\n";
+#              print STDERR "POSIX Blocking enabled\n";
        }
 
 
@@ -53,6 +53,8 @@ my $eagain = eval {EAGAIN()};
 my $einprogress = eval {EINPROGRESS()};
 my $ewouldblock = eval {EWOULDBLOCK()};
 $^W = $w;
+$cnum = 0;
+
 
 #
 #-----------------------------------------------------------------
@@ -73,9 +75,11 @@ sub new
                csort => 'telnet',
                timeval => 60,
                blocking => 0,
-               cnum => ++$noconns,
+               cnum => (($cnum < 999) ? (++$cnum) : ($cnum = 1)),
     };
 
+       $noconns++;
+       
        dbg('connll', "Connection created ($noconns)");
        return bless $conn, $class;
 }
@@ -119,7 +123,7 @@ sub conns
                $call = $pkg->{call} unless $call;
                return undef unless $call;
                dbg('connll', "changing $pkg->{call} to $call") if exists $pkg->{call} && $call ne $pkg->{call};
-               delete $conns{$pkg->{call}} if $pkg->{call} ne $call; 
+               delete $conns{$pkg->{call}} if exists $pkg->{call} && exists $conns{$pkg->{call}} && $pkg->{call} ne $call; 
                $pkg->{call} = $call;
                $ref = $conns{$call} = $pkg;
                dbg('connll', "Connection $pkg->{cnum} $call stored");
@@ -283,13 +287,11 @@ sub _send {
         delete $conn->{send_offset};
         $offset = 0;
         shift @$rq;
-        last unless $flush; # Go back to select and wait
+        #last unless $flush; # Go back to select and wait
                             # for it to fire again.
     }
     # Call me back if queue has not been drained.
-    if (@$rq) {
-        set_event_handler ($sock, write => sub {$conn->_send(0)});
-    } else {
+    unless (@$rq) {
         set_event_handler ($sock, write => undef);
                if (exists $conn->{close_on_empty}) {
                        &{$conn->{eproc}}($conn, undef) if exists $conn->{eproc};