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
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
+ {$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
\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
- internalclose({$ifdef mswindows}getlasterror{$else}linuxerror{$endif});\r
+ internalclose({$ifdef mswindows}sendflushlasterror{$else}linuxerror{$endif});\r
end \r
end;\r
end;\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