summary | 
shortlog | 
log | 
commit | commitdiff | 
tree
raw | 
patch | 
inline | side by side (from parent 1: 
ffb12fb)
 
       lasterror:integer;\r
       destroying:boolean;\r
       recvbufsize:integer;\r
       lasterror:integer;\r
       destroying:boolean;\r
       recvbufsize:integer;\r
+      datasentcalled:boolean;\r
+      {$ifdef mswindows}\r
+      sendflushlasterror:integer;\r
+      {$endif}\r
       function receivestr:tbufferstring; virtual;\r
       procedure close;\r
       procedure abort;\r
       function receivestr:tbufferstring; virtual;\r
       procedure close;\r
       procedure abort;\r
     result := -1;\r
     exit;\r
   end;\r
     result := -1;\r
     exit;\r
   end;\r
+  datasentcalled := false;\r
 \r
   lensent := sendq.get(data,packetbasesize*2);\r
   if assigned(data) then result := myfdwrite(fdhandleout,data^,lensent) else result := 0;\r
 \r
   if result = -1 then lensent := 0 else lensent := result;\r
 \r
 \r
   lensent := sendq.get(data,packetbasesize*2);\r
   if assigned(data) then result := myfdwrite(fdhandleout,data^,lensent) else result := 0;\r
 \r
   if result = -1 then lensent := 0 else lensent := result;\r
 \r
+  {$ifdef mswindows}\r
+  if (result = -1) then sendflushlasterror := getlasterror else sendflushlasterror := 0;\r
+  {$endif}\r
+\r
   //sendq := copy(sendq,lensent+1,length(sendq)-lensent);\r
   sendq.del(lensent);\r
 \r
   //sendq := copy(sendq,lensent+1,length(sendq)-lensent);\r
   sendq.del(lensent);\r
 \r
 \r
         end else begin\r
           {$ifdef mswindows}\r
 \r
         end else begin\r
           {$ifdef mswindows}\r
-          if getlasterror=WSAEWOULDBLOCK then begin\r
+          if sendflushlasterror=WSAEWOULDBLOCK then begin\r
             //the asynchronous nature of windows messages means we sometimes\r
             //get here with the buffer full\r
             //so do nothing in that case\r
           end else\r
           {$endif}\r
           begin\r
             //the asynchronous nature of windows messages means we sometimes\r
             //get here with the buffer full\r
             //so do nothing in that case\r
           end else\r
           {$endif}\r
           begin\r
-            internalclose({$ifdef mswindows}getlasterror{$else}linuxerror{$endif});\r
+            internalclose({$ifdef mswindows}sendflushlasterror{$else}linuxerror{$endif});\r
     end else begin\r
       //everything is sent fire off ondatasent event\r
       if fdhandleout >= 0 then eventcore.wmasterclr(fdhandleout);//fd_clr(fdhandleout,fdswmaster);\r
     end else begin\r
       //everything is sent fire off ondatasent event\r
       if fdhandleout >= 0 then eventcore.wmasterclr(fdhandleout);//fd_clr(fdhandleout,fdswmaster);\r
-      if assigned(ondatasent) then tltask.create(self.dodatasent,self,0,0);\r
+      if assigned(ondatasent) then begin\r
+        if not datasentcalled then begin\r
+          tltask.create(self.dodatasent,self,0,0);\r
+          datasentcalled := true;\r
+        end;\r
+      end;\r
+\r
     end;\r
     if assigned(onfdwrite) then onfdwrite(self,0);\r
   end;\r
     end;\r
     if assigned(onfdwrite) then onfdwrite(self,0);\r
   end;\r