X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/9b641f7a6cda5781002a12c901addc01787003e9..68ac8381cae336dda0cd718dd6fa43b677f5ef8d:/lcore.pas diff --git a/lcore.pas b/lcore.pas index da0fd66..727ca1c 100755 --- a/lcore.pas +++ b/lcore.pas @@ -35,7 +35,13 @@ interface const - packetbasesize = 1460; + {how this number is made up: + - ethernet: MTU 1500 + - be safe for either "ethernet v1" or "PPPoE", both take 8 bytes + - IPv6 header: 40 bytes (IPv4 is 20) + - TCP/UDP header: 20 bytes + } + packetbasesize = 1432; receivebufsize=packetbasesize*8; var @@ -399,6 +405,9 @@ end; procedure tlasio.internalclose(error:word); begin if (state<>wsclosed) and (state<>wsinvalidstate) then begin + // -2 is a special indication that we should just exist silently + // (used for connect failure handling when socket creation fails) + if (fdhandlein = -2) and (fdhandleout = -2) then exit; if (fdhandlein < 0) or (fdhandleout < 0) then raise exception.create('internalclose called with invalid fd handles'); eventcore.rmasterclr(fdhandlein);//fd_clr(fdhandlein,fdsrmaster); eventcore.wmasterclr(fdhandleout);//fd_clr(fdhandleout,fdswmaster); @@ -567,7 +576,16 @@ begin internalclose(0); end else begin - internalclose({$ifdef win32}getlasterror{$else}linuxerror{$endif}); + {$ifdef win32} + if getlasterror=WSAEWOULDBLOCK then begin + //the asynchronous nature of windows messages means we sometimes + //get here with the buffer full + //so do nothing in that case + end else + {$endif} + begin + internalclose({$ifdef win32}getlasterror{$else}linuxerror{$endif}); + end end; end;