2
0
Эх сурвалжийг харах

* socketerror mods for windows.

git-svn-id: trunk@7307 -
marco 18 жил өмнө
parent
commit
31e0776694

+ 5 - 1
rtl/inc/socketsh.inc

@@ -162,10 +162,14 @@ type
 
 
 {$ifdef Unix}
 {$ifdef Unix}
    {$define socketerror_defined}
    {$define socketerror_defined}
-   
    property socketerror : cint read fpgeterrno;
    property socketerror : cint read fpgeterrno;
 {$endif}
 {$endif}
 
 
+{$ifdef MSWindows}
+   {$define socketerror_defined}
+   property socketerror : cint read WSAGetLastError;
+{$endif}
+
 {$ifndef socketerror_defined}
 {$ifndef socketerror_defined}
 Var
 Var
   SocketError:cint;
   SocketError:cint;

+ 3 - 85
rtl/win/sockets.pp

@@ -63,67 +63,39 @@ Implementation
 function fpsocket       (domain:cint; xtype:cint; protocol: cint):cint;
 function fpsocket       (domain:cint; xtype:cint; protocol: cint):cint;
 begin
 begin
   fpSocket:=WinSock2.Socket(Domain,xtype,ProtoCol);
   fpSocket:=WinSock2.Socket(Domain,xtype,ProtoCol);
-  if fpSocket<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
 function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
 begin
 begin
   fpSend:=WinSock2.Send(S,msg,len,flags);
   fpSend:=WinSock2.Send(S,msg,len,flags);
-  if fpSend<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
 function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
 begin
 begin
   // Dubious construct, this should be checked. (IPV6 fails ?)
   // Dubious construct, this should be checked. (IPV6 fails ?)
   fpSendTo:=WinSock2.SendTo(S,msg,Len,Flags,Winsock2.PSockAddr(tox),toLen);
   fpSendTo:=WinSock2.SendTo(S,msg,Len,Flags,Winsock2.PSockAddr(tox),toLen);
-  if fpSendTo<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fprecv         (s:cint; buf: pointer; len: size_t; flags: cint):ssize_t;
 function fprecv         (s:cint; buf: pointer; len: size_t; flags: cint):ssize_t;
 begin
 begin
   fpRecv:=WinSock2.Recv(S,Buf,Len,Flags);
   fpRecv:=WinSock2.Recv(S,Buf,Len,Flags);
-  if fpRecv<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 
 
 begin
 begin
   fpRecvFrom:=WinSock2.RecvFrom(S,Buf,Len,Flags,WinSock2.PSockAddr(From),FromLen);
   fpRecvFrom:=WinSock2.RecvFrom(S,Buf,Len,Flags,WinSock2.PSockAddr(From),FromLen);
-  if fpRecvFrom<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fpconnect     (s:cint; name  : psockaddr; namelen : tsocklen):cint;
 function fpconnect     (s:cint; name  : psockaddr; namelen : tsocklen):cint;
 
 
 begin
 begin
   fpConnect:=Winsock2.Connect(S,WinSock2.PSockAddr(name),nameLen);
   fpConnect:=Winsock2.Connect(S,WinSock2.PSockAddr(name),nameLen);
-  if fpConnect<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fpshutdown     (s:cint; how:cint):cint;
 function fpshutdown     (s:cint; how:cint):cint;
 begin
 begin
   fpShutDown:=Winsock2.ShutDown(S,How);
   fpShutDown:=Winsock2.ShutDown(S,How);
-  if fpShutDown<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 Function socket(Domain,SocketType,Protocol:Longint):Longint;
 Function socket(Domain,SocketType,Protocol:Longint):Longint;
@@ -154,91 +126,49 @@ begin
 end;
 end;
 
 
 function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
 function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
-
 begin
 begin
   fpbind:=Winsock2.Bind(S,Winsock2.PSockAddr(Addrx),AddrLen);
   fpbind:=Winsock2.Bind(S,Winsock2.PSockAddr(Addrx),AddrLen);
-  if fpbind<0 then
-       SocketError:=WSAGetLastError
-  else
-       SocketError:=0;
 end;
 end;
 
 
 function fplisten      (s:cint; backlog : cint):cint;
 function fplisten      (s:cint; backlog : cint):cint;
-
 begin
 begin
   fplisten:=Winsock2.Listen(S,backlog);
   fplisten:=Winsock2.Listen(S,backlog);
-  if fplisten<0 then
-       SocketError:=WSAGetLastError
-  else
-       SocketError:=0;
 end;
 end;
 
 
 function fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
 function fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
 begin
 begin
   fpAccept:=Winsock2.Accept(S,Winsock2.PSockAddr(Addrx), AddrLen);
   fpAccept:=Winsock2.Accept(S,Winsock2.PSockAddr(Addrx), AddrLen);
-  if fpAccept<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
 function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
-
 begin
 begin
   fpGetSockName:=Winsock2.GetSockName(S,Winsock2.TSockAddr(name^),nameLen^);
   fpGetSockName:=Winsock2.GetSockName(S,Winsock2.TSockAddr(name^),nameLen^);
-  if fpGetSockName<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 begin
 begin
   fpGetPeerName:=Winsock2.GetPeerName(S,Winsock2.TSockAddr(name^),NameLen^);
   fpGetPeerName:=Winsock2.GetPeerName(S,Winsock2.TSockAddr(name^),NameLen^);
-  if fpGetPeerName<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 begin
 begin
   fpGetSockOpt:=Winsock2.GetSockOpt(S,Level,OptName,OptVal,OptLen^);
   fpGetSockOpt:=Winsock2.GetSockOpt(S,Level,OptName,OptVal,OptLen^);
-  if fpGetSockOpt<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint;
 function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint;
-
 begin
 begin
   fpSetSockOpt:=Winsock2.SetSockOpt(S,Level,OptName,OptVal,OptLen);
   fpSetSockOpt:=Winsock2.SetSockOpt(S,Level,OptName,OptVal,OptLen);
-  if fpSetSockOpt<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
 end;
 end;
 
 
 function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 begin
 begin
   fpsocketpair:=-1;
   fpsocketpair:=-1;
-  SocketError:=EOPNOTSUPP;
+  WSASetLastError(EOPNOTSUPP); // so that wsagetlasterror retrieves it
 end;
 end;
 
 
 Function CloseSocket(Sock:Longint):Longint;
 Function CloseSocket(Sock:Longint):Longint;
-var i : longint;
 begin
 begin
-  i := Winsock2.CloseSocket (Sock);
-  if i <> 0 then
-  begin
-    SocketError:=WSAGetLastError;
-    CloseSocket := i;
-  end else
-  begin
-    CloseSocket := 0;
-    SocketError := 0;
-  end;
+  result := Winsock2.CloseSocket (Sock);
 end;
 end;
 
 
 Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
 Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
@@ -301,12 +231,7 @@ function fpWrite(handle : longint;Const bufptr;size : dword) : dword;
 begin
 begin
   fpWrite := dword(Winsock2.send(handle, bufptr, size, 0));
   fpWrite := dword(Winsock2.send(handle, bufptr, size, 0));
   if fpWrite = dword(winsock2.SOCKET_ERROR) then
   if fpWrite = dword(winsock2.SOCKET_ERROR) then
-  begin
-    SocketError := WSAGetLastError;
     fpWrite := 0;
     fpWrite := 0;
-  end
-  else
-    SocketError := 0;
 end;
 end;
 
 
 function fpRead(handle : longint;var bufptr;size : dword) : dword;
 function fpRead(handle : longint;var bufptr;size : dword) : dword;
@@ -316,7 +241,6 @@ function fpRead(handle : longint;var bufptr;size : dword) : dword;
   begin
   begin
      if ioctlsocket(handle,FIONREAD,@d) = winsock2.SOCKET_ERROR then
      if ioctlsocket(handle,FIONREAD,@d) = winsock2.SOCKET_ERROR then
        begin
        begin
-         SocketError:=WSAGetLastError;
          fpRead:=0;
          fpRead:=0;
          exit;
          exit;
        end;
        end;
@@ -326,14 +250,8 @@ function fpRead(handle : longint;var bufptr;size : dword) : dword;
            size:=d;
            size:=d;
          fpRead := dword(Winsock2.recv(handle, bufptr, size, 0));
          fpRead := dword(Winsock2.recv(handle, bufptr, size, 0));
          if fpRead = dword(winsock2.SOCKET_ERROR) then
          if fpRead = dword(winsock2.SOCKET_ERROR) then
-         begin
-           SocketError:= WSAGetLastError;
            fpRead := 0;
            fpRead := 0;
-         end else
-           SocketError:=0;
-       end
-     else
-       SocketError:=0;
+       end;
   end;
   end;
 
 
 {$i sockets.inc}
 {$i sockets.inc}