+  {$ifdef mswindows}\r
+    result := winsock.accept(fdhandlein,@fromaddr,@fromaddrsize);\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
+    raise esocketexception.create('error '+inttostr(acceptlasterror)+' while accepting');\r
+  end;\r
+  if result > absolutemaxs then begin\r
+    myfdclose(result);\r
+    a := result;\r
+{    result := -1;}\r
+    raise esocketexception.create('file descriptor out of range: '+inttostr(a));\r
+  end;\r
+end;\r
+\r
+\r
+function tlsocket.sendto(dest:TInetSockAddrV;destlen:integer;data:pointer;len:integer):integer;\r
+var\r
+  {$ifdef ipv6}\r
+    realdest : tinetsockaddrv;\r
+    biniptemp : tbinip;\r
+  {$endif}\r
+  destx : {$ifdef mswindows}winsock.pSockAddr{$else}pInetSockAddrV{$endif};\r
+\r
+begin\r
+  {$ifdef secondlistener}\r
+    if assigned(secondlistener) then if (dest.inaddr.family = AF_INET) then begin\r
+      result := secondlistener.sendto(dest,destlen,data,len);\r
+      exit;\r
+    end;\r
+  {$endif}\r
+  {$ifdef ipv6}\r
+    if isv6socket then begin\r
+      biniptemp := inaddrvtobinip(dest);\r
+      converttov6(biniptemp);\r
+      destlen := makeinaddrv(biniptemp,inttostr(ntohs(dest.InAddr.port)),realdest);\r
+      destx := {$ifdef mswindows}winsock.pSockAddr{$else}pInetSockAddrV{$endif}(@realdest)\r
+    end else begin\r
+      destx := {$ifdef mswindows}winsock.pSockAddr{$else}pInetSockAddrV{$endif}(@dest)\r
+    end;\r
+  {$else}\r
+    destx := {$ifdef mswindows}winsock.pSockAddr{$else}pInetSockAddrV{$endif}(@dest);\r
+  {$endif}\r
+\r
+  result := {$ifdef mswindows}winsock.sendto{$else}system_sendto{$endif}(self.fdhandleout,data^,len,0,destx^,destlen);\r
+end;\r
+\r
+\r
+function tlsocket.receivefrom(data:pointer;len:integer;var src:TInetSockAddrV;var srclen:integer):integer;\r
+var\r
+  tempsrc:TInetSockAddrV;\r
+  tempsrclen:integer;\r
+  srcx : {$ifdef mswindows}winsock.TSockAddr{$else}TInetSockAddrV{$endif} absolute tempsrc;\r
+  biniptemp:tbinip;\r
+begin\r
+  {$ifdef secondlistener}\r
+  if assigned(secondlistener) then if lastsessionfromsecond then begin\r
+    lastsessionfromsecond := false;\r
+    result := secondlistener.receivefrom(data,len,src,srclen);\r
+    exit;\r
+  end;\r
+  {$endif}\r
+  tempsrclen := sizeof(tempsrc);\r
+  result := recvfrom(self.fdhandlein,data^,len,0,srcx,tempsrclen);\r
+\r
+  {$ifdef ipv6}\r
+  biniptemp := inaddrvtobinip(tempsrc);\r
+  if needconverttov4(biniptemp) then begin\r
+    converttov4(biniptemp);\r
+    tempsrclen := makeinaddrv(biniptemp,inttostr(ntohs(tempsrc.InAddr.port)),tempsrc);\r