accept lasterror must be obtained before the rmasterset
authorbeware <beware@bircd.org>
Fri, 7 Aug 2015 00:58:35 +0000 (00:58 +0000)
committerbeware <beware@bircd.org>
Fri, 7 Aug 2015 00:58:35 +0000 (00:58 +0000)
git-svn-id: file:///svnroot/lcore/trunk@142 b1de8a11-f9be-4011-bde0-cc7ace90066a

lsocket.pas

index 4596f6b938129c268b9481200bfd15b20accf3ba..f359a55521de4b5f51802fba6033d865b85a069c 100644 (file)
@@ -534,7 +534,7 @@ function tlsocket.accept : longint;
 var\r
   FromAddrSize     : LongInt;        // i don't really know what to do with these at this\r
   FromAddr         : TInetSockAddrV;  // at this point time will tell :)\r
 var\r
   FromAddrSize     : LongInt;        // i don't really know what to do with these at this\r
   FromAddr         : TInetSockAddrV;  // at this point time will tell :)\r
-  a:integer;\r
+  a,acceptlasterror:integer;\r
 begin\r
   {$ifdef secondlistener}\r
   if (lastsessionfromsecond) then begin\r
 begin\r
   {$ifdef secondlistener}\r
   if (lastsessionfromsecond) then begin\r
@@ -550,11 +550,14 @@ begin
   {$else}\r
     result := system_accept(fdhandlein,fromaddr,fromaddrsize);\r
   {$endif}\r
   {$else}\r
     result := system_accept(fdhandlein,fromaddr,fromaddrsize);\r
   {$endif}\r
+\r
+  if (result = -1) then acceptlasterror := {$ifdef mswindows}getlasterror{$else}socketerror{$endif} else acceptlasterror := 0;\r
+\r
   //now we have accepted one request start monitoring for more again\r
   eventcore.rmasterset(fdhandlein,true);\r
 \r
   if result = -1 then begin\r
   //now we have accepted one request start monitoring for more again\r
   eventcore.rmasterset(fdhandlein,true);\r
 \r
   if result = -1 then begin\r
-    raise esocketexception.create('error '+inttostr({$ifdef mswindows}getlasterror{$else}socketerror{$endif})+' while accepting');\r
+    raise esocketexception.create('error '+inttostr(acceptlasterror)+' while accepting');\r
   end;\r
   if result > absolutemaxs then begin\r
     myfdclose(result);\r
   end;\r
   if result > absolutemaxs then begin\r
     myfdclose(result);\r