Browse Source

* make winsock more compatible to win32 version

armin 21 years ago
parent
commit
afdd6dcf1a
4 changed files with 136 additions and 330 deletions
  1. 27 6
      rtl/netware/Makefile
  2. 2 4
      rtl/netware/Makefile.fpc
  3. 6 217
      rtl/netware/sockets.pp
  4. 101 103
      rtl/netware/winsock.pp

+ 27 - 6
rtl/netware/Makefile

@@ -1,5 +1,5 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/08/13]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/09/16]
 #
 #
 default: all
 default: all
 MAKEFILETARGETS=netware
 MAKEFILETARGETS=netware
@@ -230,7 +230,7 @@ CREATESMART=0
 OBJPASDIR=$(RTL)/objpas
 OBJPASDIR=$(RTL)/objpas
 override TARGET_UNITS+=$(SYSTEMUNIT) systhrds objpas macpas strings lineinfo winsock heaptrc matrix initc dos crt objects sysutils classes typinfo math varutils cpu mmx getopts   sockets video mouse keyboard types dateutils rtlconst sysconst strutils convutils aio nwsnut nwserv nwnit nwprot
 override TARGET_UNITS+=$(SYSTEMUNIT) systhrds objpas macpas strings lineinfo winsock heaptrc matrix initc dos crt objects sysutils classes typinfo math varutils cpu mmx getopts   sockets video mouse keyboard types dateutils rtlconst sysconst strutils convutils aio nwsnut nwserv nwnit nwprot
 override TARGET_LOADERS+=nwpre prelude
 override TARGET_LOADERS+=nwpre prelude
-override TARGET_RSTS+=math varutils typinfo classes dateutils sysconst
+override TARGET_RSTS+=math varutils typinfo classes dateutils sysconst convutils rtlconst systhrds
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC)
@@ -543,6 +543,12 @@ STATICLIBPREFIX=
 FPCMADE=fpcmade.nw
 FPCMADE=fpcmade.nw
 ZIPSUFFIX=nw
 ZIPSUFFIX=nw
 endif
 endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+FPCMADE=fpcmade.nwl
+ZIPSUFFIX=nwl
+endif
 ifeq ($(OS_TARGET),macos)
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 BATCHEXT=
 EXEEXT=
 EXEEXT=
@@ -695,6 +701,18 @@ FPCMADE=fpcmade.nw
 ZIPSUFFIX=nw
 ZIPSUFFIX=nw
 EXEEXT=.nlm
 EXEEXT=.nlm
 endif
 endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+FPCMADE=fpcmade.nwl
+ZIPSUFFIX=nwl
+EXEEXT=.nlm
+endif
 ifeq ($(OS_TARGET),macos)
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 BATCHEXT=
 PPUEXT=.ppu
 PPUEXT=.ppu
@@ -787,7 +805,7 @@ ifndef COPY
 COPY:=$(CPPROG) -fp
 COPY:=$(CPPROG) -fp
 endif
 endif
 ifndef COPYTREE
 ifndef COPYTREE
-COPYTREE:=$(CPPROG) -rfp
+COPYTREE:=$(CPPROG) -Rfp
 endif
 endif
 ifndef MOVE
 ifndef MOVE
 MOVE:=$(MVPROG) -f
 MOVE:=$(MVPROG) -f
@@ -1103,7 +1121,7 @@ fpc_debug:
 	$(MAKE) all DEBUG=1
 	$(MAKE) all DEBUG=1
 fpc_release:
 fpc_release:
 	$(MAKE) all RELEASE=1
 	$(MAKE) all RELEASE=1
-.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .dpr .pp .rc .res
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
 %$(PPUEXT): %.pp
 %$(PPUEXT): %.pp
 	$(COMPILER) $<
 	$(COMPILER) $<
 	$(EXECPPAS)
 	$(EXECPPAS)
@@ -1116,6 +1134,9 @@ fpc_release:
 %$(EXEEXT): %.pas
 %$(EXEEXT): %.pas
 	$(COMPILER) $<
 	$(COMPILER) $<
 	$(EXECPPAS)
 	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
 %$(EXEEXT): %.dpr
 %$(EXEEXT): %.dpr
 	$(COMPILER) $<
 	$(COMPILER) $<
 	$(EXECPPAS)
 	$(EXECPPAS)
@@ -1123,6 +1144,7 @@ fpc_release:
 	windres -i $< -o $@
 	windres -i $< -o $@
 vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
 vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
 vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
 vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
 vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
 vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
 vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
 vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
 .PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
 .PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
@@ -1389,8 +1411,7 @@ strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
 		   $(SYSTEMUNIT)$(PPUEXT)
 		   $(SYSTEMUNIT)$(PPUEXT)
 systhrds$(PPUEXT): systhrds.pp $(INC)/threadh.inc $(SYSTEMUNIT)$(PPUEXT) objpas$(PPUEXT)
 systhrds$(PPUEXT): systhrds.pp $(INC)/threadh.inc $(SYSTEMUNIT)$(PPUEXT) objpas$(PPUEXT)
 netware$(PPUEXT) : netware.pp $(SYSTEMUNIT)$(PPUEXT)
 netware$(PPUEXT) : netware.pp $(SYSTEMUNIT)$(PPUEXT)
-	$(COMPILER) -I$(WININC) netware.pp
-winsock2$(PPUEXT) : winsock2.pp qos.inc netware$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
+winsock$(PPUEXT) : winsock.pp $(SYSTEMUNIT)$(PPUEXT)
 sockets$(PPUEXT) : sockets.pp netware$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
 sockets$(PPUEXT) : sockets.pp netware$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
 		   $(INC)/sockets.inc $(INC)/socketsh.inc
 		   $(INC)/sockets.inc $(INC)/socketsh.inc
 initc$(PPUEXT) : initc.pp $(SYSTEMUNIT)$(PPUEXT)
 initc$(PPUEXT) : initc.pp $(SYSTEMUNIT)$(PPUEXT)

+ 2 - 4
rtl/netware/Makefile.fpc

@@ -16,7 +16,7 @@ units=$(SYSTEMUNIT) systhrds objpas macpas strings \
       video mouse keyboard types dateutils rtlconst sysconst \
       video mouse keyboard types dateutils rtlconst sysconst \
       strutils convutils \
       strutils convutils \
       aio nwsnut nwserv nwnit nwprot
       aio nwsnut nwserv nwnit nwprot
-rsts=math varutils typinfo classes dateutils sysconst
+rsts=math varutils typinfo classes dateutils sysconst convutils rtlconst systhrds
 
 
 [require]
 [require]
 nortl=y
 nortl=y
@@ -119,10 +119,8 @@ systhrds$(PPUEXT): systhrds.pp $(INC)/threadh.inc $(SYSTEMUNIT)$(PPUEXT) objpas$
 #
 #
 
 
 netware$(PPUEXT) : netware.pp $(SYSTEMUNIT)$(PPUEXT)
 netware$(PPUEXT) : netware.pp $(SYSTEMUNIT)$(PPUEXT)
-        $(COMPILER) -I$(WININC) netware.pp
 
 
-
-winsock2$(PPUEXT) : winsock2.pp qos.inc netware$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
+winsock$(PPUEXT) : winsock.pp $(SYSTEMUNIT)$(PPUEXT)
 
 
 sockets$(PPUEXT) : sockets.pp netware$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
 sockets$(PPUEXT) : sockets.pp netware$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
                    $(INC)/sockets.inc $(INC)/socketsh.inc
                    $(INC)/sockets.inc $(INC)/socketsh.inc

+ 6 - 217
rtl/netware/sockets.pp

@@ -51,222 +51,6 @@ Implementation
 {******************************************************************************
 {******************************************************************************
                           Basic Socket Functions
                           Basic Socket Functions
 ******************************************************************************}
 ******************************************************************************}
-(***
-Function fpsocket(Domain,SocketType,Protocol:Longint):Longint;
-begin
-  fpSocket:=WinSock.Socket(Domain,SocketType,ProtoCol);
-  if fpSocket<0 then
-    fpSocketError:=WSAGetLastError
-  else
-    fpSocketError:=0;
-end;
-
-Function fpCloseSocket(s:cint):Longint;
-var i : longint;
-begin
-  i := Winsock.CloseSocket (s);
-  if i <> 0 then
-  begin
-    SocketError:=WSAGetLastError;
-    fpCloseSocket := i;
-  end else
-  begin
-    fpCloseSocket := 0;
-    SocketError := 0;
-  end;
-end;
-
-Function fpSend(s:cint;const Buf;BufLen,Flags:Longint):Longint;
-begin
-  fpSend:=WinSock.Send(s,Buf,BufLen,Flags);
-  if fpSend<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-Function fpSendTo(s:cint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
-begin
-  // Dubious construct, this should be checked.
-  fpSendTo:=WinSock.SendTo(s,Buf,BufLen,Flags,Winsock.TSockAddr(Addr),AddrLen);
-  if fpSendTo<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-Function fpRecv(S:cint;Var Buf;BufLen,Flags:Longint):Longint;
-begin
-  fpRecv:=WinSock.Recv(Sock,Buf,BufLen,Flags);
-  if fpRecv<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-
-Function fpRecvFrom(s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
-begin
-  fpRecvFrom:=WinSock.RecvFrom(s,Buf,len,flags,Winsock.TSockAddr(from^),FromLen^);
-  if fpRecvFrom<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-
-function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
-
-begin
-  fpbind:=WinSock.Bind(S,WinSock.PSockAddr(Addrx),AddrLen);
-  if fpbind<0 then
-       SocketError:=WSAGetLastError
-  else
-       SocketError:=0;
-end;
-
-Function Listen(Sock,MaxConnect:Longint):Boolean;
-
-  var
-     l : longint;
-
-begin
-  l:=WinSock.Listen(Sock,MaxConnect);
-  if l<0 then
-    begin
-       SocketError:=WSAGetLastError;
-       Listen:=false;
-    end
-  else
-    begin
-       SocketError:=0;
-       Listen:=true;
-    end;
-end;
-
-Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
-begin
-  Accept:=WinSock.Accept(Sock,WinSock.PSockAddr(@Addr),plongint(@AddrLen));
-  if Accept<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-Function Connect(Sock:Longint;Const Addr;Addrlen:Longint):Boolean;
-
-begin
-  Connect:=WinSock.Connect(Sock,@WinSock.TSockAddr(Addr),AddrLen)=0;
-  if not Connect then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-Function Shutdown(Sock:Longint;How:Longint):Longint;
-begin
-  ShutDown:=WinSock.ShutDown(Sock,How);
-  if ShutDown<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
-begin
-  GetSocketName:=WinSock.GetSockName(Sock,WinSock.TSockAddr(Addr),AddrLen);
-  if GetSocketName<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
-begin
-  GetPeerName:=WinSock.GetPeerName(Sock,WinSock.TSockAddr(Addr),AddrLen);
-  if GetPeerName<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-Function SetSocketOptions(Sock,Level,OptName:Longint;Const OptVal;optlen:longint):Longint;
-begin
-  SetSocketOptions:=WinSock.SetSockOpt(Sock,Level,OptName,pchar(@OptVal),OptLen);
-  if SetSocketOptions<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
-begin
-  GetSocketOptions:=WinSock.GetSockOpt(Sock,Level,OptName,OptVal,OptLen);
-  if GetSocketOptions<0 then
-    SocketError:=WSAGetLastError
-  else
-    SocketError:=0;
-end;
-
-Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
-begin
-  // SocketPair:=SocketCall(Socket_Sys_SocketPair,Domain,SocketType,Protocol,longint(@Pair),0,0);
-end;
-
-
-{ mimic the linux fdWrite/fdRead calls for the file/text socket wrapper }
-function fdWrite(handle : longint;Const bufptr;size : dword) : dword;
-begin
-  fdWrite := dword(WinSock.send(handle, bufptr, size, 0));
-  if fdWrite = dword(SOCKET_ERROR) then
-  begin
-    SocketError := WSAGetLastError;
-    fdWrite := 0;
-  end
-  else
-    SocketError := 0;
-end;
-
-function fdRead(handle : longint;var bufptr;size : dword) : dword;
-  var
-     d : dword;
-
-  begin
-     if ioctlsocket(handle,FIONREAD,@d) = SOCKET_ERROR then
-       begin
-         SocketError:=WSAGetLastError;
-         fdRead:=0;
-         exit;
-       end;
-     if d>0 then
-       begin
-         if size>d then
-           size:=d;
-         fdRead := dword(WinSock.recv(handle, bufptr, size, 0));
-         if fdRead = dword(SOCKET_ERROR) then
-         begin
-           SocketError:= WSAGetLastError;
-           fdRead := 0;
-         end else
-           SocketError:=0;
-       end
-     else
-       SocketError:=0;
-  end;
-
-
-{$i sockets.inc}
-
-{ winsocket stack needs an init. and cleanup code }
-var
-  wsadata : twsadata;
-
-initialization
-  WSAStartUp($2,wsadata);
-finalization
-  WSACleanUp;
-end.
-***)
 
 
 function fpsocket 	(domain:cint; xtype:cint; protocol: cint):cint;
 function fpsocket 	(domain:cint; xtype:cint; protocol: cint):cint;
 begin
 begin
@@ -430,6 +214,7 @@ 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;
 end;
 end;
 
 
 Function CloseSocket(Sock:Longint):Longint;
 Function CloseSocket(Sock:Longint):Longint;
@@ -501,6 +286,7 @@ end;
 Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
 Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
 begin
 begin
   // SocketPair:=SocketCall(Socket_Sys_SocketPair,Domain,SocketType,Protocol,longint(@Pair),0,0);a
   // SocketPair:=SocketCall(Socket_Sys_SocketPair,Domain,SocketType,Protocol,longint(@Pair),0,0);a
+  SocketPair := -1;
 end;
 end;
 
 
 
 
@@ -599,7 +385,10 @@ finalization
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.5  2004-07-30 15:05:25  armin
+  Revision 1.6  2004-09-18 23:45:43  armin
+  * make winsock more compatible to win32 version
+
+  Revision 1.5  2004/07/30 15:05:25  armin
   make netware rtl compilable under 1.9.5
   make netware rtl compilable under 1.9.5
 
 
   Revision 1.4  2003/03/25 18:17:54  armin
   Revision 1.4  2003/03/25 18:17:54  armin

+ 101 - 103
rtl/netware/winsock.pp

@@ -13,27 +13,16 @@
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 
- **********************************************************************
- For NetWare 4.11 you must install winsock-support (i.e. nw4wsock.exe)
+ ************************************************************************
+ For NetWare 4.11 you have to install winsock-support (i.e. nw4wsock.exe)
  NetWare >= 5.0 contains winsock support by default
  NetWare >= 5.0 contains winsock support by default
- **********************************************************************}
+ ************************************************************************}
 
 
 {$PACKRECORDS 1}
 {$PACKRECORDS 1}
 {$R-}
 {$R-}
 
 
 unit winsock;
 unit winsock;
-{ ifndef VER0_99_14}
-{ ifndef NO_SMART_LINK}
-{ define support_smartlink}
-{ endif}
-{ endif}
 
 
-
-{ ifdef support_smartlink}
-{ smartlink on}
-{ endif}
-
-{$smartlink off}  {for now, there seems to be a problem with fpc or the linker !}
 {$mode objfpc}
 {$mode objfpc}
 
 
   interface
   interface
@@ -41,9 +30,8 @@ unit winsock;
     const
     const
        {
        {
          Default maximium number of sockets.
          Default maximium number of sockets.
-         this does not
-         mean that the underlying Windows Sockets implementation has to
-         support that many!
+         this does not mean that the underlying netware
+         Sockets implementation has to support that many!
        }
        }
        FD_SETSIZE = 64;
        FD_SETSIZE = 64;
 
 
@@ -52,7 +40,7 @@ unit winsock;
        tOS_UINT = DWord;
        tOS_UINT = DWord;
        ptOS_INT = ^tOS_INT;
        ptOS_INT = ^tOS_INT;
        ptOS_UINT = ^tOS_UINT;
        ptOS_UINT = ^tOS_UINT;
-    
+
        u_char = char;
        u_char = char;
        u_short = word;
        u_short = word;
        u_int = tOS_UINT;
        u_int = tOS_UINT;
@@ -60,7 +48,7 @@ unit winsock;
        pu_long = ^u_long;
        pu_long = ^u_long;
        pu_short = ^u_short;
        pu_short = ^u_short;
        plongint = ^longint;
        plongint = ^longint;
-       TSocket = u_long;
+       TSocket = longint;
        BOOL    = boolean;
        BOOL    = boolean;
        LPINT   = ^integer;
        LPINT   = ^integer;
        LPDWORD = ^dword;
        LPDWORD = ^dword;
@@ -100,16 +88,6 @@ unit winsock;
        TTimeVal = timeval;
        TTimeVal = timeval;
        PTimeVal = ^TTimeVal;
        PTimeVal = ^TTimeVal;
 
 
-       { found no reference to this type in c header files and here. AlexS }
-       { minutes west of Greenwich  }
-       { type of dst correction  }
-       timezone = record
-          tz_minuteswest : longint;
-          tz_dsttime : longint;
-       end;
-       TTimeZone = timezone;
-       PTimeZone = ^TTimeZone;
-
     const
     const
        IOCPARM_MASK = $7f;
        IOCPARM_MASK = $7f;
        IOC_VOID = $20000000;
        IOC_VOID = $20000000;
@@ -154,15 +132,11 @@ unit winsock;
          fits in an unsigned long -- someday that won't be true!
          fits in an unsigned long -- someday that won't be true!
        }
        }
        netent = record
        netent = record
-          { official name of net  }
-          n_name : ^char;
-          { alias list  }
-          n_aliases : ^pchar;
-          { net address type  }
-          n_addrtype : SmallInt;
-          n_pad1 : SmallInt;    { ensure right packaging }
-          { network #  }
-          n_net : u_long;
+          n_name : ^char;        // official name of net
+          n_aliases : ^pchar;    // alias list
+          n_addrtype : SmallInt; // net address type
+          n_pad1 : SmallInt;     // ensure right packaging
+          n_net : u_long;        // network #
        end;
        end;
        TNetEnt = netent;
        TNetEnt = netent;
        PNetEnt = ^TNetEnt;
        PNetEnt = ^TNetEnt;
@@ -270,9 +244,9 @@ unit winsock;
 	          sa_family : SmallInt;                       (* 2 byte *)
 	          sa_family : SmallInt;                       (* 2 byte *)
                   sa_data : array[0..13] of char;             (* 14 byte *)
                   sa_data : array[0..13] of char;             (* 14 byte *)
                  );
                  );
-	
+
          end;
          end;
-         
+
        TSockAddrIn = sockaddr_in;
        TSockAddrIn = sockaddr_in;
        PSockAddrIn = ^TSockAddrIn;
        PSockAddrIn = ^TSockAddrIn;
        TSockAddr = sockaddr_in;
        TSockAddr = sockaddr_in;
@@ -335,7 +309,7 @@ unit winsock;
        taken from the BSD file sys/socket.h.
        taken from the BSD file sys/socket.h.
     }
     }
     const
     const
-       INVALID_SOCKET = u_long(not(1));
+       INVALID_SOCKET = longint(not(1));
        SOCKET_ERROR = -1;
        SOCKET_ERROR = -1;
        SOCK_STREAM = 1;
        SOCK_STREAM = 1;
        SOCK_DGRAM = 2;
        SOCK_DGRAM = 2;
@@ -1069,8 +1043,6 @@ unit winsock;
        SERVICE_TYPE_VALUE_OBJECTID = SERVICE_TYPE_VALUE_OBJECTIDA;
        SERVICE_TYPE_VALUE_OBJECTID = SERVICE_TYPE_VALUE_OBJECTIDA;
 {$endif}
 {$endif}
 
 
-{$ifndef __CSADDR_DEFINED__}
-{$define __CSADDR_DEFINED__}
     { SockAddr Information }
     { SockAddr Information }
     type
     type
 
 
@@ -1091,7 +1063,6 @@ unit winsock;
          end;
          end;
        PCSADDR_INFO  = ^TCSADDR_INFO;
        PCSADDR_INFO  = ^TCSADDR_INFO;
        LPCSADDR_INFO = ^TCSADDR_INFO;
        LPCSADDR_INFO = ^TCSADDR_INFO;
-{$endif}
 
 
     { Address list returned via SIO_ADDRESS_LIST_QUERY }
     { Address list returned via SIO_ADDRESS_LIST_QUERY }
 
 
@@ -1196,9 +1167,9 @@ unit winsock;
        LUP_RES_SERVICE = $8000;
        LUP_RES_SERVICE = $8000;
        LUP_FLUSHCACHE = $1000;
        LUP_FLUSHCACHE = $1000;
        LUP_FLUSHPREVIOUS = $2000;
        LUP_FLUSHPREVIOUS = $2000;
-    { }
+
     { Return flags }
     { Return flags }
-    { }
+
        RESULT_IS_ALIAS = $0001;
        RESULT_IS_ALIAS = $0001;
 
 
     { Service Address Registration and Deregistration Data Types. }
     { Service Address Registration and Deregistration Data Types. }
@@ -1759,14 +1730,9 @@ unit winsock;
      NS_SLP = 5;
      NS_SLP = 5;
   { Predefined BLOB Value Types }
   { Predefined BLOB Value Types }
   { Extends Predefined Value Types in winnt.h }
   { Extends Predefined Value Types in winnt.h }
-  { }
-  {#define REG_SZ                   ( 1 )   // Unicode NULL terminated string }
-  {#define REG_BINARY               ( 3 )   // Free form binary }
-  {#define REG_DWORD                ( 4 )   // 32-bit number }
-  { Boolian value; TRUE or FALSE }
-     REG_BOOL = 11;
-  { Keyword with no value }
-     REG_KEYWORD = 12;
+
+     REG_BOOL    = 11;  // Boolean value; TRUE or FALSE }
+     REG_KEYWORD = 12;  // Keyword with no value
 
 
   {___[ Type definitions ]__________________________________________________________________________ }
   {___[ Type definitions ]__________________________________________________________________________ }
 
 
@@ -1851,6 +1817,16 @@ unit winsock;
     _fn_getprotobyname   = 'WS2_32_getprotobyname';
     _fn_getprotobyname   = 'WS2_32_getprotobyname';
     {$endif}
     {$endif}
 
 
+{
+Winsock types all buffers as pchar (char *), modern POSIX does it the ANSI
+C way with pointer (void *). If the pointer overloaded version doesn't exist,
+a "pointer" will be passed to the "var" version. (bug 3142).
+So if there are var/const versions:
+- To keep ported unix code working, there must be "pointer" variants (ANSI)
+- To keep Delphi/ported C Winsock code working there must be pchar variants
+	(K&R)
+IOW, there _must_ be 3 versions then: var/const, pchar and pointer}
+
     {$ifdef netware}
     {$ifdef netware}
     function accept(s:TSocket; addr: PSockAddr; addrlen : ptOS_INT) : TSocket;
     function accept(s:TSocket; addr: PSockAddr; addrlen : ptOS_INT) : TSocket;
     function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;
     function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;
@@ -1859,23 +1835,23 @@ unit winsock;
     function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;stdcall;external winsockdll name 'accept';
     function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;stdcall;external winsockdll name 'accept';
     {$endif}
     {$endif}
     function bind(s:TSocket; addr: PSockaddr;namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_Bind;
     function bind(s:TSocket; addr: PSockaddr;namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_Bind;
-    function bind(s:TSocket; var addr: TSockaddr;namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_Bind;
+    function bind(s:TSocket; const addr: TSockaddr;namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_Bind;
     function closesocket(s:TSocket):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_closesocket;
     function closesocket(s:TSocket):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_closesocket;
     {$ifdef netware}
     {$ifdef netware}
     function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT;
     function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT;
-    function connect(s:TSocket; var name:TSockAddr; namelen:tOS_INT):tOS_INT;
+    function connect(s:TSocket; Const name:TSockAddr; namelen:tOS_INT):tOS_INT;
     {$else}
     {$else}
-    function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT;
-      stdcall;external winsockdll name 'connect';
-    function connect(s:TSocket; var name:TSockAddr; namelen:tOS_INT):tOS_INT;
-      stdcall;external winsockdll name 'connect';
+    function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT; stdcall;external winsockdll name 'connect';
+    function connect(s:TSocket; Const name:TSockAddr; namelen:tOS_INT):tOS_INT; stdcall;external winsockdll name 'connect';
     {$endif}
     {$endif}
 
 
-    function ioctlsocket(s:TSocket; cmd:longint; var arg:u_long):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_ioctlsocket; { really a c-long }
-    function ioctlsocket(s:TSocket; cmd:longint; argp:pu_long):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_ioctlsocket; { really a c-long }
+    function ioctlsocket(s:TSocket; cmd:longint; var arg:u_long):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_ioctlsocket;
+    function ioctlsocket(s:TSocket; cmd:longint; var arg:longint):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_ioctlsocket;
+    function ioctlsocket(s:TSocket; cmd:longint; argp:pu_long):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_ioctlsocket;
     function getpeername(s:TSocket; var name:TSockAddr;var namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getpeername;
     function getpeername(s:TSocket; var name:TSockAddr;var namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getpeername;
     function getsockname(s:TSocket; var name:TSockAddr;var namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getpeername;
     function getsockname(s:TSocket; var name:TSockAddr;var namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getpeername;
     function getsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pchar;var optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getsockopt;
     function getsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pchar;var optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getsockopt;
+    function getsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pointer;var optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getsockopt;
     function getsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT;var optval;var optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getsockopt;
     function getsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT;var optval;var optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getsockopt;
     function htonl(hostlong:u_long):u_long;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_htonl;
     function htonl(hostlong:u_long):u_long;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_htonl;
     function htons(hostshort:u_short):u_short;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_htons;
     function htons(hostshort:u_short):u_short;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_htons;
@@ -1889,28 +1865,25 @@ unit winsock;
     {$endif}
     {$endif}
 
 
     function recv(s:TSocket;buf:pchar; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_recv;
     function recv(s:TSocket;buf:pchar; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_recv;
+    function recv(s:TSocket;buf:pointer; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_recv;
     function recv(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_recv;
     function recv(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_recv;
     function recvfrom(s:TSocket;buf:pchar; len:tOS_INT; flags:tOS_INT;from:PSockAddr; fromlen:ptOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
     function recvfrom(s:TSocket;buf:pchar; len:tOS_INT; flags:tOS_INT;from:PSockAddr; fromlen:ptOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
-    function recvfrom(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT;var from:TSockAddr; var fromlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
-    function select(nfds:tOS_INT; readfds,writefds,exceptfds : PFDSet;timeout: PTimeVal):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name _fn_select;
-    function send(s:TSocket;const buf; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name _fn_send;
-    function sendto(s:TSocket; buf:pchar; len:tOS_INT; flags:tOS_INT;var toaddr:TSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
+    function recvfrom(s:TSocket;buf:pointer; len:tOS_INT; flags:tOS_INT;from:PSockAddr; fromlen:ptOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
+    function recvfrom(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT;Const from:TSockAddr; var fromlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
+    function select(nfds:tOS_INT; readfds,writefds,exceptfds : PFDSet;timeout: PTimeVal):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_select;
+    function send(s:TSocket;const buf; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_send;
+    function send(s:TSocket;buf : pchar; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_send;
+    function send(s:TSocket;buf : pointer; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_send;
+    function sendto(s:TSocket; buf:pchar; len:tOS_INT; flags:tOS_INT;toaddr:PSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_sendto;
+    function sendto(s:TSocket; buf:pointer; len:tOS_INT; flags:tOS_INT;toaddr:PSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_sendto;
+    function sendto(s:TSocket; const buf; len:tOS_INT; flags:tOS_INT;Const toaddr:TSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
       external winsockdll name _fn_sendto;
       external winsockdll name _fn_sendto;
-    function sendto(s:TSocket; const buf; len:tOS_INT; flags:tOS_INT;var toaddr:TSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name _fn_sendto;  
-      
-    function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pchar; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name _fn_setsockopt;
-    function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; var optval; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name _fn_setsockopt;
-    function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pointer; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name _fn_setsockopt;
-    function shutdown(s:TSocket; how:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name _fn_shutdown;
-    function socket(af:tOS_INT; t:tOS_INT; protocol:tOS_INT):TSocket;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name _fn_socket;
+
+    function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pchar; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_setsockopt;
+    function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; Const optval; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_setsockopt;
+    function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pointer; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_setsockopt;
+    function shutdown(s:TSocket; how:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_shutdown;
+    function socket(af:tOS_INT; t:tOS_INT; protocol:tOS_INT):TSocket;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_socket;
 
 
     { Database function prototypes  }
     { Database function prototypes  }
     function gethostbyaddr(addr:pchar; len:tOS_INT; t:tOS_INT): PHostEnt;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_gethostbyaddr;
     function gethostbyaddr(addr:pchar; len:tOS_INT; t:tOS_INT): PHostEnt;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_gethostbyaddr;
@@ -1953,14 +1926,8 @@ unit winsock;
     function WSARecvEx(s:TSocket;var buf; len:tOS_INT; flags:ptOS_INT):tOS_INT;stdcall;
     function WSARecvEx(s:TSocket;var buf; len:tOS_INT; flags:ptOS_INT):tOS_INT;stdcall;
       external winsockdll name 'WSARecvEx';
       external winsockdll name 'WSARecvEx';
     {$endif}
     {$endif}
-    function __WSAFDIsSet(s:TSocket; var FDSet:TFDSet):Bool;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name '__WSAFDIsSet';
-    function __WSAFDIsSet_(s:TSocket; var FDSet:TFDSet):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name '__WSAFDIsSet';
-
-    function FD_ISSET(s:TSocket; var FDSet:TFDSet):Bool;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
-      external winsockdll name '__WSAFDIsSet';
-
+    function __WSAFDIsSet(s:TSocket; var FDSet:TFDSet):Bool;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name '__WSAFDIsSet';
+    function __WSAFDIsSet_(s:TSocket; var FDSet:TFDSet):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name '__WSAFDIsSet';
 
 
     {$ifndef netware}
     {$ifndef netware}
     function TransmitFile(hSocket:TSocket; hFile:THandle; nNumberOfBytesToWrite:dword;
     function TransmitFile(hSocket:TSocket; hFile:THandle; nNumberOfBytesToWrite:dword;
@@ -1988,7 +1955,7 @@ unit winsock;
     function WSAGetSelectEvent(Param:dword):Word;
     function WSAGetSelectEvent(Param:dword):Word;
     function WSAGetSelectError(Param:dword):Word;
     function WSAGetSelectError(Param:dword):Word;
     procedure FD_CLR(Socket:TSocket; var FDSet:TFDSet);
     procedure FD_CLR(Socket:TSocket; var FDSet:TFDSet);
-    {function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;}
+    function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;
     procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
     procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
     procedure FD_ZERO(var FDSet:TFDSet);
     procedure FD_ZERO(var FDSet:TFDSet);
 
 
@@ -2010,7 +1977,7 @@ unit winsock;
     function WSACloseEvent (hEvent : TWSAEVENT) : longint;
     function WSACloseEvent (hEvent : TWSAEVENT) : longint;
       {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSACloseEvent';
       {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSACloseEvent';
 
 
-    function WSAconnect (s:TSocket; var name:TSockAddr;
+    function WSAconnect (s:TSocket; Const name:TSockAddr;
                          namelen: tOS_INT;
                          namelen: tOS_INT;
                          lpCallerData, lpCaleeData : PWSABUF;
                          lpCallerData, lpCaleeData : PWSABUF;
                          lpSQOS, lpGQOS : PQOS) : tOS_INT;
                          lpSQOS, lpGQOS : PQOS) : tOS_INT;
@@ -2099,6 +2066,12 @@ unit winsock;
                      lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
                      lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
     {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecv';
     {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecv';
 
 
+    function WSARecv(s:TSocket;buf:pointer; dwBufferCount:dword;
+                     lpNumberOfBytesRecvd,lpFlags : LPDWORD;
+                     lpOverlapped:PWSAOVERLAPPED;
+                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
+    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecv';
+
     function WSARecv(s:TSocket;var buf; dwBufferCount:dword;
     function WSARecv(s:TSocket;var buf; dwBufferCount:dword;
                      var lpNumberOfBytesRecvd,lpFlags : DWORD;
                      var lpNumberOfBytesRecvd,lpFlags : DWORD;
                      lpOverlapped:PWSAOVERLAPPED;
                      lpOverlapped:PWSAOVERLAPPED;
@@ -2119,6 +2092,14 @@ unit winsock;
                      lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
                      lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
     {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecvFrom';
     {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecvFrom';
 
 
+    function WSARecvFrom(s:TSocket;buf:pointer; dwBufferCount:dword;
+                     lpNumberOfBytesRecvd,lpFlags : LPDWORD;
+                     lpFrom: PSockaddr;
+                     lpFromlen: PDWORD;
+                     lpOverlapped:PWSAOVERLAPPED;
+                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
+    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecvFrom';
+
     function WSARecvFrom(s:TSocket;var buf; dwBufferCount:dword;
     function WSARecvFrom(s:TSocket;var buf; dwBufferCount:dword;
                      var lpNumberOfBytesRecvd,lpFlags : DWORD;
                      var lpNumberOfBytesRecvd,lpFlags : DWORD;
                      var lpFrom: TSockaddr;
                      var lpFrom: TSockaddr;
@@ -2136,6 +2117,12 @@ unit winsock;
                      lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
                      lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
     {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASend';
     {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASend';
 
 
+    function WSASend(s:TSocket;buf:pointer;len:dword;
+                     NumberOfBytesSent:PDWORD; Flags:dword;
+                     lpOverlapped:PWSAOVERLAPPED;
+                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
+    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASend';
+
     function WSASend(s:TSocket;var buf;len:dword;
     function WSASend(s:TSocket;var buf;len:dword;
                      var NumberOfBytesSent: DWORD; Flags:dword;
                      var NumberOfBytesSent: DWORD; Flags:dword;
                      lpOverlapped:PWSAOVERLAPPED;
                      lpOverlapped:PWSAOVERLAPPED;
@@ -2154,6 +2141,15 @@ unit winsock;
                        lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
                        lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
     {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASendTo';
     {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASendTo';
 
 
+    function WSASendTo(s:TSocket;buf:pointer;len:dword;
+                       NumberOfBytesSent:LPDWORD;
+                       Flags:dword;
+                       lpTo: PSockaddr;
+                       iToLen:dword;
+                       lpOverlapped:PWSAOVERLAPPED;
+                       lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
+    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASendTo';
+
     function WSASendTo(s:TSocket;var buf;len:dword;
     function WSASendTo(s:TSocket;var buf;len:dword;
                        var NumberOfBytesSent:DWORD;
                        var NumberOfBytesSent:DWORD;
                        Flags:dword;
                        Flags:dword;
@@ -2331,10 +2327,10 @@ unit winsock;
            end;
            end;
       end;
       end;
 
 
-    {function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;
+    function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;
     begin
     begin
        FD_ISSET:=__WSAFDIsSet(Socket,FDSet);
        FD_ISSET:=__WSAFDIsSet(Socket,FDSet);
-    end;}
+    end;
 
 
     procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
     procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
     var i : integer;
     var i : integer;
@@ -2351,24 +2347,23 @@ unit winsock;
     end;
     end;
 
 
     procedure FD_ZERO(var FDSet:TFDSet);
     procedure FD_ZERO(var FDSet:TFDSet);
-    var i : integer;
     begin
     begin
-      for i := 0 to high (FDSet.fd_array) do
-        FDSet.fd_array[i] := INVALID_SOCKET;
-      FDSet.fd_count:=0;
+      fillchar(FDSet,sizeof(FDSet),0);
+      {FDSet.fd_count:=0;}
     end;
     end;
 
 
     {$ifdef netware}
     {$ifdef netware}
       {windows has connect and accept in ws2_32.dll, netware has not, they
       {windows has connect and accept in ws2_32.dll, netware has not, they
        are defined as macros in ws2nlm.h }
        are defined as macros in ws2nlm.h }
+
     function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT;
     function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT;
     begin
     begin
       connect := WSAConnect (s,addr,namelen,nil,nil,nil,nil);
       connect := WSAConnect (s,addr,namelen,nil,nil,nil,nil);
     end;
     end;
 
 
-    function connect(s:TSocket; var name:TSockAddr; namelen:tOS_INT):tOS_INT; //cdecl;external winsockdll name 'WSAConnect';
+    function connect(s:TSocket; Const name:TSockAddr; namelen:tOS_INT):tOS_INT; //cdecl;external winsockdll name 'WSAConnect';
     begin
     begin
-      connect := WSAConnect (s,name,namelen,nil,nil,nil,nil);
+      connect := WSAConnect (s,@name,namelen,nil,nil,nil,nil);
     end;
     end;
 
 
     function accept(s:TSocket; addr: PSockAddr; addrlen : ptOS_INT) : TSocket;
     function accept(s:TSocket; addr: PSockAddr; addrlen : ptOS_INT) : TSocket;
@@ -2378,7 +2373,7 @@ unit winsock;
 
 
     function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;
     function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;
     begin
     begin
-      accept := WSAAccept (s,addr,addrlen,nil,0);
+      accept := WSAAccept (s,addr,@addrlen,nil,0);
     end;
     end;
 
 
 
 
@@ -2414,11 +2409,11 @@ unit winsock;
       begin
       begin
         Result := __WSAStartup(wVersionRequired,WSAData);
         Result := __WSAStartup(wVersionRequired,WSAData);
         if Result = 0 then WSAstartupData := WSAData;
         if Result = 0 then WSAstartupData := WSAData;
-        Writeln (stderr,'WSAStartup called');
+        {Writeln (stderr,'WSAStartup called');}
       end else
       end else
       begin
       begin
         result := 0;
         result := 0;
-        Writeln (stderr,'WSAStartup should be called only once !');
+        {Writeln (stderr,'WSAStartup should be called only once !');}
       end;
       end;
     end;
     end;
 
 
@@ -2430,7 +2425,10 @@ finalization
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.3  2003-10-25 23:42:35  hajny
+  Revision 1.4  2004-09-18 23:45:43  armin
+  * make winsock more compatible to win32 version
+
+  Revision 1.3  2003/10/25 23:42:35  hajny
     * THandle in sysutils common using System.THandle
     * THandle in sysutils common using System.THandle
 
 
   Revision 1.2  2003/03/30 12:35:43  armin
   Revision 1.2  2003/03/30 12:35:43  armin