Make winsock.h and winsock2.h independent from the Unix headers.
Make them compatible with both the Unix C headers and the MSVCRT
headers.
Ensure compatibility with the Unix headers via the USE_WS_PREFIX
macro.
Add WINE_NOWINSOCK: prevents winsock.h from being included from
windows.h when defined.
Add ws2tcpip.h, move definitions to the right header.

diff --git a/dlls/winsock/socket.c b/dlls/winsock/socket.c
index 8547df0..12b761c 100644
--- a/dlls/winsock/socket.c
+++ b/dlls/winsock/socket.c
@@ -7,14 +7,8 @@
  * NOTE: If you make any changes to fix a particular app, make sure 
  * they don't break something else like Netscape or telnet and ftp 
  * clients and servers (www.winsite.com got a lot of those).
- *
- * NOTE 2: Many winsock structs such as servent, hostent, protoent, ...
- * are used with 1-byte alignment for Win16 programs and 4-byte alignment
- * for Win32 programs in winsock.h. winsock2.h uses forced 4-byte alignment.
- * So we have non-forced (just as MSDN) ws_XXXXent (winsock.h), 4-byte forced
- * ws_XXXXent32 (winsock2.h) and 1-byte forced ws_XXXXent16 (winsock16.h).
  */
- 
+
 #include "config.h"
 #include "wine/port.h"
 
@@ -92,6 +86,7 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "winsock2.h"
+#include "ws2tcpip.h"
 #include "wsipx.h"
 #include "wine/winsock16.h"
 #include "winnt.h"
@@ -154,7 +149,6 @@
 int WS_dup_he(struct hostent* p_he, int flag);
 int WS_dup_pe(struct protoent* p_pe, int flag);
 int WS_dup_se(struct servent* p_se, int flag);
-int WINAPI WSOCK32_getpeername(SOCKET s, ws_sockaddr *name, int *namelen);
 
 typedef void	WIN_hostent;
 typedef void	WIN_protoent;
@@ -317,9 +311,9 @@
 }
 
 /***********************************************************************
- *		WSOCK32_LibMain (WS2_32.init)
+ *		WS_LibMain (WS2_32.init)
  */
-BOOL WINAPI WSOCK32_LibMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID fImpLoad)
+BOOL WINAPI WS_LibMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID fImpLoad)
 {
     TRACE("0x%x 0x%lx %p\n", hInstDLL, fdwReason, fImpLoad);
     switch (fdwReason) {
@@ -391,7 +385,7 @@
     if( wsfds ) 
     { 
 #define wsfds16	((ws_fd_set16*)wsfds)
-#define wsfds32 ((ws_fd_set32*)wsfds)
+#define wsfds32 ((WS_fd_set*)wsfds)
 	int i, count;
 
 	FD_ZERO(fds);
@@ -437,7 +431,7 @@
     if( wsfds )
     {
 #define wsfds16 ((ws_fd_set16*)wsfds)
-#define wsfds32 ((ws_fd_set32*)wsfds)
+#define wsfds32 ((WS_fd_set*)wsfds)
 	int i, j, count = (b32) ? wsfds32->fd_count : wsfds16->fd_count;
 
 	for( i = 0, j = 0; i < count; i++ )
@@ -477,7 +471,7 @@
     if ( wsfds )
     {
 #define wsfds16 ((ws_fd_set16*)wsfds)
-#define wsfds32 ((ws_fd_set32*)wsfds)
+#define wsfds32 ((WS_fd_set*)wsfds)
 	int i, count = (b32) ? wsfds32->fd_count : wsfds16->fd_count;
 
 	for( i = 0; i < count; i++ )
@@ -765,17 +759,17 @@
  * start with. Note that the returned pointer may be the original pointer 
  * if no conversion is necessary.
  */
-const struct sockaddr* ws_sockaddr_ws2u(const ws_sockaddr* wsaddr, int wsaddrlen, int *uaddrlen)
+const struct sockaddr* ws_sockaddr_ws2u(const struct WS_sockaddr* wsaddr, int wsaddrlen, int *uaddrlen)
 {
     switch (wsaddr->sa_family)
     {
 #ifdef HAVE_IPX
     case WS_AF_IPX:
         {
-            struct ws_sockaddr_ipx* wsipx=(struct ws_sockaddr_ipx*)wsaddr;
+            struct WS_sockaddr_ipx* wsipx=(struct WS_sockaddr_ipx*)wsaddr;
             struct sockaddr_ipx* uipx;
 
-            if (wsaddrlen<sizeof(struct ws_sockaddr_ipx))
+            if (wsaddrlen<sizeof(struct WS_sockaddr_ipx))
                 return NULL;
 
             *uaddrlen=sizeof(struct sockaddr_ipx);
@@ -793,7 +787,7 @@
 #endif
 
     default:
-        if (wsaddrlen<sizeof(ws_sockaddr))
+        if (wsaddrlen<sizeof(struct WS_sockaddr))
             return NULL;
 
         /* No conversion needed, just return the original address */
@@ -804,7 +798,7 @@
 }
 
 /* allocates a Unix sockaddr structure to receive the data */
-inline struct sockaddr* ws_sockaddr_alloc(const ws_sockaddr* wsaddr, int* wsaddrlen, int* uaddrlen)
+inline struct sockaddr* ws_sockaddr_alloc(const struct WS_sockaddr* wsaddr, int* wsaddrlen, int* uaddrlen)
 {
     if (*wsaddrlen==0)
         *uaddrlen=0;
@@ -817,7 +811,7 @@
 }
 
 /* Returns 0 if successful, -1 if the buffer is too small */
-int ws_sockaddr_u2ws(const struct sockaddr* uaddr, int uaddrlen, ws_sockaddr* wsaddr, int* wsaddrlen)
+int ws_sockaddr_u2ws(const struct sockaddr* uaddr, int uaddrlen, struct WS_sockaddr* wsaddr, int* wsaddrlen)
 {
     int res;
 
@@ -827,7 +821,7 @@
     case AF_IPX:
         {
             struct sockaddr_ipx* uipx=(struct sockaddr_ipx*)uaddr;
-            struct ws_sockaddr_ipx* wsipx=(struct ws_sockaddr_ipx*)wsaddr;
+            struct WS_sockaddr_ipx* wsipx=(struct WS_sockaddr_ipx*)wsaddr;
 
             res=-1;
             switch (*wsaddrlen) /* how much can we copy? */
@@ -873,7 +867,7 @@
 /* to be called to free the memory allocated by ws_sockaddr_ws2u or 
  * ws_sockaddr_alloc
  */
-inline void ws_sockaddr_free(const struct sockaddr* uaddr, const ws_sockaddr* wsaddr)
+inline void ws_sockaddr_free(const struct sockaddr* uaddr, const struct WS_sockaddr* wsaddr)
 {
     if (uaddr!=NULL && uaddr!=(const struct sockaddr*)wsaddr)
         free((void*)uaddr);
@@ -882,7 +876,7 @@
 /***********************************************************************
  *		accept		(WS2_32.1)
  */
-SOCKET WINAPI WSOCK32_accept(SOCKET s, ws_sockaddr *addr,
+SOCKET WINAPI WS_accept(SOCKET s, struct WS_sockaddr *addr,
                                  int *addrlen32)
 {
     int fd = _get_sock_fd(s);
@@ -913,7 +907,7 @@
 	if (as)
 	{
 	    unsigned omask = _get_sock_mask( s );
-	    WSOCK32_getpeername(fd, addr, addrlen32);
+	    WS_getpeername(fd, addr, addrlen32);
 	    if (omask & FD_WINE_SERVEVENT)
 		ws2_async_accept(s, as);
 	    return as;
@@ -929,11 +923,11 @@
 /***********************************************************************
  *              accept		(WINSOCK.1)
  */
-SOCKET16 WINAPI WINSOCK_accept16(SOCKET16 s, ws_sockaddr* addr,
+SOCKET16 WINAPI WINSOCK_accept16(SOCKET16 s, struct WS_sockaddr* addr,
                                  INT16* addrlen16 )
 {
     INT addrlen32 = addrlen16 ? *addrlen16 : 0;
-    SOCKET retSocket = WSOCK32_accept( s, addr, &addrlen32 );
+    SOCKET retSocket = WS_accept( s, addr, &addrlen32 );
     if( addrlen16 ) *addrlen16 = (INT16)addrlen32;
     return (SOCKET16)retSocket;
 }
@@ -941,7 +935,7 @@
 /***********************************************************************
  *		bind			(WS2_32.2)
  */
-int WINAPI WSOCK32_bind(SOCKET s, const ws_sockaddr* name, int namelen)
+int WINAPI WS_bind(SOCKET s, const struct WS_sockaddr* name, int namelen)
 {
     int fd = _get_sock_fd(s);
     int res;
@@ -1007,15 +1001,15 @@
 /***********************************************************************
  *              bind			(WINSOCK.2)
  */
-INT16 WINAPI WINSOCK_bind16(SOCKET16 s, ws_sockaddr *name, INT16 namelen)
+INT16 WINAPI WINSOCK_bind16(SOCKET16 s, struct WS_sockaddr *name, INT16 namelen)
 {
-  return (INT16)WSOCK32_bind( s, name, namelen );
+  return (INT16)WS_bind( s, name, namelen );
 }
 
 /***********************************************************************
  *		closesocket		(WS2_32.3)
  */
-INT WINAPI WSOCK32_closesocket(SOCKET s)
+int WINAPI WS_closesocket(SOCKET s)
 {
     TRACE("socket %08x\n", s);
     if (CloseHandle(s)) return 0;
@@ -1027,13 +1021,13 @@
  */
 INT16 WINAPI WINSOCK_closesocket16(SOCKET16 s)
 {
-    return (INT16)WSOCK32_closesocket(s);
+    return (INT16)WS_closesocket(s);
 }
 
 /***********************************************************************
  *		connect		(WS2_32.4)
  */
-int WINAPI WSOCK32_connect(SOCKET s, const ws_sockaddr* name, int namelen)
+int WINAPI WS_connect(SOCKET s, const struct WS_sockaddr* name, int namelen)
 {
     int fd = _get_sock_fd(s);
 
@@ -1111,15 +1105,15 @@
 /***********************************************************************
  *              connect               (WINSOCK.4)
  */
-INT16 WINAPI WINSOCK_connect16(SOCKET16 s, ws_sockaddr *name, INT16 namelen)
+INT16 WINAPI WINSOCK_connect16(SOCKET16 s, struct WS_sockaddr *name, INT16 namelen)
 {
-  return (INT16)WSOCK32_connect( s, name, namelen );
+  return (INT16)WS_connect( s, name, namelen );
 }
 
 /***********************************************************************
  *		getpeername		(WS2_32.5)
  */
-int WINAPI WSOCK32_getpeername(SOCKET s, ws_sockaddr *name, int *namelen)
+int WINAPI WS_getpeername(SOCKET s, struct WS_sockaddr *name, int *namelen)
 {
     int fd = _get_sock_fd(s);
     int res;
@@ -1159,11 +1153,11 @@
 /***********************************************************************
  *              getpeername		(WINSOCK.5)
  */
-INT16 WINAPI WINSOCK_getpeername16(SOCKET16 s, ws_sockaddr *name,
+INT16 WINAPI WINSOCK_getpeername16(SOCKET16 s, struct WS_sockaddr *name,
                                    INT16 *namelen16)
 {
     INT namelen32 = *namelen16;
-    INT retVal = WSOCK32_getpeername( s, name, &namelen32 );
+    INT retVal = WS_getpeername( s, name, &namelen32 );
 
 #if DEBUG_SOCKADDR
     dump_sockaddr(name);
@@ -1176,7 +1170,7 @@
 /***********************************************************************
  *		getsockname		(WS2_32.6)
  */
-int WINAPI WSOCK32_getsockname(SOCKET s, ws_sockaddr *name, int *namelen)
+int WINAPI WS_getsockname(SOCKET s, struct WS_sockaddr *name, int *namelen)
 {
     int fd = _get_sock_fd(s);
     int res;
@@ -1215,7 +1209,7 @@
 /***********************************************************************
  *              getsockname		(WINSOCK.6)
  */
-INT16 WINAPI WINSOCK_getsockname16(SOCKET16 s, ws_sockaddr *name,
+INT16 WINAPI WINSOCK_getsockname16(SOCKET16 s, struct WS_sockaddr *name,
                                    INT16 *namelen16)
 {
     INT retVal;
@@ -1223,7 +1217,7 @@
     if( namelen16 )
     {
         INT namelen32 = *namelen16;
-        retVal = WSOCK32_getsockname( s, name, &namelen32 );
+        retVal = WS_getsockname( s, name, &namelen32 );
        *namelen16 = namelen32;
 
 #if DEBUG_SOCKADDR
@@ -1239,7 +1233,7 @@
 /***********************************************************************
  *		getsockopt		(WS2_32.7)
  */
-INT WINAPI WSOCK32_getsockopt(SOCKET s, INT level, 
+INT WINAPI WS_getsockopt(SOCKET s, INT level, 
                                   INT optname, char *optval, INT *optlen)
 {
     int fd = _get_sock_fd(s);
@@ -1262,6 +1256,7 @@
     return SOCKET_ERROR;
 }
 
+
 /***********************************************************************
  *              getsockopt		(WINSOCK.7)
  */
@@ -1272,47 +1267,72 @@
     INT *p = &optlen32;
     INT retVal;
     if( optlen ) optlen32 = *optlen; else p = NULL;
-    retVal = WSOCK32_getsockopt( s, (UINT16)level, optname, optval, p );
+    retVal = WS_getsockopt( s, (UINT16)level, optname, optval, p );
     if( optlen ) *optlen = optlen32;
     return (INT16)retVal;
 }
 
+
 /***********************************************************************
  *		htonl			(WINSOCK.8)
  *		htonl			(WS2_32.8)
  */
-u_long WINAPI WINSOCK_htonl(u_long hostlong)   { return( htonl(hostlong) ); }
+u_long WINAPI WS_htonl(u_long hostlong)
+{
+    return htonl(hostlong);
+}
+
+
 /***********************************************************************
  *		htons			(WINSOCK.9)
  *		htons			(WS2_32.9)
  */
-u_short WINAPI WINSOCK_htons(u_short hostshort) { return( htons(hostshort) ); }
+u_short WINAPI WS_htons(u_short hostshort)
+{
+    return htons(hostshort);
+}
+
+
 /***********************************************************************
  *		inet_addr		(WINSOCK.10)
  *		inet_addr		(WS2_32.11)
  */
-u_long WINAPI WINSOCK_inet_addr(char *cp)      { return( inet_addr(cp) ); }
+u_long WINAPI WS_inet_addr(const char *cp)
+{
+    return inet_addr(cp);
+}
+
+
 /***********************************************************************
  *		ntohl			(WINSOCK.14)
  *		ntohl			(WS2_32.14)
  */
-u_long WINAPI WINSOCK_ntohl(u_long netlong)    { return( ntohl(netlong) ); }
+u_long WINAPI WS_ntohl(u_long netlong)
+{
+    return ntohl(netlong);
+}
+
+
 /***********************************************************************
  *		ntohs			(WINSOCK.15)
  *		ntohs			(WS2_32.15)
  */
-u_short WINAPI WINSOCK_ntohs(u_short netshort)  { return( ntohs(netshort) ); }
+u_short WINAPI WS_ntohs(u_short netshort)
+{
+    return ntohs(netshort);
+}
+
 
 /***********************************************************************
  *		inet_ntoa		(WS2_32.12)
  */
-char* WINAPI WSOCK32_inet_ntoa(struct in_addr in)
+char* WINAPI WS_inet_ntoa(struct WS_in_addr in)
 {
   /* use "buffer for dummies" here because some applications have 
    * propensity to decode addresses in ws_hostent structure without 
    * saving them first...
    */
-    char* s = inet_ntoa(in);
+    char* s = inet_ntoa(*((struct in_addr*)&in));
     if( s )
     {
         if( dbuffer == NULL ) {
@@ -1335,7 +1355,7 @@
  */
 SEGPTR WINAPI WINSOCK_inet_ntoa16(struct in_addr in)
 {
-  char* retVal = WSOCK32_inet_ntoa(in);
+  char* retVal = WS_inet_ntoa(*((struct WS_in_addr*)&in));
   return SEGPTR_GET(retVal);
 }
 
@@ -1404,11 +1424,11 @@
                }
                else
                {
-                  struct ws_sockaddr_in *ipTemp = (struct ws_sockaddr_in *)&ifInfo.ifr_addr;
+                  struct WS_sockaddr_in *ipTemp = (struct WS_sockaddr_in *)&ifInfo.ifr_addr;
                
                   intArray->iiAddress.AddressIn.sin_family = AF_INET;
                   intArray->iiAddress.AddressIn.sin_port = ipTemp->sin_port;
-                  intArray->iiAddress.AddressIn.sin_addr.ws_addr = ipTemp->sin_addr.S_un.S_addr;
+                  intArray->iiAddress.AddressIn.sin_addr.WS_s_addr = ipTemp->sin_addr.S_un.S_addr;
                }
                
                /* Broadcast Address */
@@ -1422,11 +1442,11 @@
                }
                else
                {
-                  struct ws_sockaddr_in *ipTemp = (struct ws_sockaddr_in *)&ifInfo.ifr_broadaddr;
+                  struct WS_sockaddr_in *ipTemp = (struct WS_sockaddr_in *)&ifInfo.ifr_broadaddr;
                
                   intArray->iiBroadcastAddress.AddressIn.sin_family = AF_INET; 
                   intArray->iiBroadcastAddress.AddressIn.sin_port = ipTemp->sin_port;
-                  intArray->iiBroadcastAddress.AddressIn.sin_addr.ws_addr = ipTemp->sin_addr.S_un.S_addr; 
+                  intArray->iiBroadcastAddress.AddressIn.sin_addr.WS_s_addr = ipTemp->sin_addr.S_un.S_addr; 
                }
 
                /* Subnet Mask */
@@ -1446,21 +1466,21 @@
                     #ifndef ifr_addr
                        intArray->iiNetmask.AddressIn.sin_family = AF_INET; 
                        intArray->iiNetmask.AddressIn.sin_port = 0;
-                       intArray->iiNetmask.AddressIn.sin_addr.ws_addr = 0; 
+                       intArray->iiNetmask.AddressIn.sin_addr.WS_s_addr = 0; 
                        ERR ("Unable to determine Netmask on your platform!\n");
                     #else
-                       struct ws_sockaddr_in *ipTemp = (struct ws_sockaddr_in *)&ifInfo.ifr_addr;
+                       struct WS_sockaddr_in *ipTemp = (struct WS_sockaddr_in *)&ifInfo.ifr_addr;
             
                        intArray->iiNetmask.AddressIn.sin_family = AF_INET; 
                        intArray->iiNetmask.AddressIn.sin_port = ipTemp->sin_port;
-                       intArray->iiNetmask.AddressIn.sin_addr.ws_addr = ipTemp->sin_addr.S_un.S_addr; 
+                       intArray->iiNetmask.AddressIn.sin_addr.WS_s_addr = ipTemp->sin_addr.S_un.S_addr; 
                     #endif
                   #else
-                     struct ws_sockaddr_in *ipTemp = (struct ws_sockaddr_in *)&ifInfo.ifr_netmask;
+                     struct WS_sockaddr_in *ipTemp = (struct WS_sockaddr_in *)&ifInfo.ifr_netmask;
             
                      intArray->iiNetmask.AddressIn.sin_family = AF_INET; 
                      intArray->iiNetmask.AddressIn.sin_port = ipTemp->sin_port;
-                     intArray->iiNetmask.AddressIn.sin_addr.ws_addr = ipTemp->sin_addr.S_un.S_addr; 
+                     intArray->iiNetmask.AddressIn.sin_addr.WS_s_addr = ipTemp->sin_addr.S_un.S_addr; 
                   #endif
                }
                
@@ -1631,7 +1651,7 @@
 /***********************************************************************
  *		ioctlsocket		(WS2_32.10)
  */
-INT WINAPI WSOCK32_ioctlsocket(SOCKET s, LONG cmd, ULONG *argp)
+int WINAPI WS_ioctlsocket(SOCKET s, long cmd, u_long *argp)
 {
   int fd = _get_sock_fd(s);
 
@@ -1670,7 +1690,7 @@
 		newcmd=SIOCATMARK; 
 		break;
 
-	case WS_IOW('f',125,u_long): 
+	case WS__IOW('f',125,u_long): 
 		WARN("Warning: WS1.1 shouldn't be using async I/O\n");
 		SetLastError(WSAEINVAL); 
 		return SOCKET_ERROR;
@@ -1703,14 +1723,14 @@
  */
 INT16 WINAPI WINSOCK_ioctlsocket16(SOCKET16 s, LONG cmd, ULONG *argp)
 {
-    return (INT16)WSOCK32_ioctlsocket( s, cmd, argp );
+    return (INT16)WS_ioctlsocket( s, cmd, argp );
 }
 
 
 /***********************************************************************
  *		listen		(WS2_32.13)
  */
-INT WINAPI WSOCK32_listen(SOCKET s, INT backlog)
+int WINAPI WS_listen(SOCKET s, int backlog)
 {
     int fd = _get_sock_fd(s);
 
@@ -1736,14 +1756,14 @@
  */
 INT16 WINAPI WINSOCK_listen16(SOCKET16 s, INT16 backlog)
 {
-    return (INT16)WSOCK32_listen( s, backlog );
+    return (INT16)WS_listen( s, backlog );
 }
 
 
 /***********************************************************************
  *		recv			(WS2_32.16)
  */
-INT WINAPI WSOCK32_recv(SOCKET s, char *buf, INT len, INT flags)
+int WINAPI WS_recv(SOCKET s, char *buf, int len, int flags)
 {
     int fd = _get_sock_fd(s);
 
@@ -1780,15 +1800,15 @@
  */
 INT16 WINAPI WINSOCK_recv16(SOCKET16 s, char *buf, INT16 len, INT16 flags)
 {
-    return (INT16)WSOCK32_recv( s, buf, len, flags );
+    return (INT16)WS_recv( s, buf, len, flags );
 }
 
 
 /***********************************************************************
  *		recvfrom		(WS2_32.17)
  */
-int WINAPI WSOCK32_recvfrom(SOCKET s, char *buf, INT len, int flags,
-                                ws_sockaddr *from, int *fromlen)
+int WINAPI WS_recvfrom(SOCKET s, char *buf, INT len, int flags,
+                                struct WS_sockaddr *from, int *fromlen)
 {
     int fd = _get_sock_fd(s);
     int res;
@@ -1850,14 +1870,14 @@
  *              recvfrom		(WINSOCK.17)
  */
 INT16 WINAPI WINSOCK_recvfrom16(SOCKET16 s, char *buf, INT16 len, INT16 flags,
-                                ws_sockaddr *from, INT16 *fromlen16)
+                                struct WS_sockaddr *from, INT16 *fromlen16)
 {
     INT fromlen32;
     INT *p = &fromlen32;
     INT retVal;
 
     if( fromlen16 ) fromlen32 = *fromlen16; else p = NULL;
-    retVal = WSOCK32_recvfrom( s, buf, len, flags, from, p );
+    retVal = WS_recvfrom( s, buf, len, flags, from, p );
     if( fromlen16 ) *fromlen16 = fromlen32;
     return (INT16)retVal;
 }
@@ -1865,9 +1885,9 @@
 /***********************************************************************
  *		__ws_select
  */
-static INT __ws_select(BOOL b32,
+static int __ws_select(BOOL b32,
                        void *ws_readfds, void *ws_writefds, void *ws_exceptfds,
-                       const struct timeval* ws_timeout)
+                       const struct WS_timeval *ws_timeout)
 {
     int         highfd = 0;
     fd_set      readfds, writefds, exceptfds;
@@ -1875,8 +1895,8 @@
     int         readfd[FD_SETSIZE], writefd[FD_SETSIZE], exceptfd[FD_SETSIZE];
     struct timeval timeout, *timeoutaddr = NULL;
 
-    TRACE("read %p, write %p, excp %p timeout %p\n", 
-           ws_readfds, ws_writefds, ws_exceptfds, ws_timeout);
+    TRACE("read %p, write %p, excp %p timeout %p\n",
+          ws_readfds, ws_writefds, ws_exceptfds, ws_timeout);
 
     p_read = fd_set_import(&readfds, ws_readfds, &highfd, readfd, b32);
     p_write = fd_set_import(&writefds, ws_writefds, &highfd, writefd, b32);
@@ -1896,7 +1916,7 @@
         if (p_except && ws_exceptfds)
         {
 #define wsfds16 ((ws_fd_set16*)ws_exceptfds)
-#define wsfds32 ((ws_fd_set32*)ws_exceptfds)
+#define wsfds32 ((WS_fd_set*)ws_exceptfds)
             int i, j, count = (b32) ? wsfds32->fd_count : wsfds16->fd_count;
 
             for (i = j = 0; i < count; i++)
@@ -1924,9 +1944,9 @@
     fd_set_unimport(ws_readfds, readfd, b32);
     fd_set_unimport(ws_writefds, writefd, b32);
     fd_set_unimport(ws_exceptfds, exceptfd, b32);
-    if( ws_readfds ) ((ws_fd_set32*)ws_readfds)->fd_count = 0;
-    if( ws_writefds ) ((ws_fd_set32*)ws_writefds)->fd_count = 0;
-    if( ws_exceptfds ) ((ws_fd_set32*)ws_exceptfds)->fd_count = 0;
+    if( ws_readfds ) ((WS_fd_set*)ws_readfds)->fd_count = 0;
+    if( ws_writefds ) ((WS_fd_set*)ws_writefds)->fd_count = 0;
+    if( ws_exceptfds ) ((WS_fd_set*)ws_exceptfds)->fd_count = 0;
 
     if( highfd == 0 ) return 0;
     SetLastError(wsaErrno());
@@ -1938,7 +1958,7 @@
  */
 INT16 WINAPI WINSOCK_select16(INT16 nfds, ws_fd_set16 *ws_readfds,
                               ws_fd_set16 *ws_writefds, ws_fd_set16 *ws_exceptfds,
-                              struct timeval *timeout)
+                              struct WS_timeval* timeout)
 {
     return (INT16)__ws_select( FALSE, ws_readfds, ws_writefds, ws_exceptfds, timeout );
 }
@@ -1946,9 +1966,9 @@
 /***********************************************************************
  *		select			(WS2_32.18)
  */
-INT WINAPI WSOCK32_select(INT nfds, ws_fd_set32 *ws_readfds,
-                              ws_fd_set32 *ws_writefds, ws_fd_set32 *ws_exceptfds,
-                              const struct timeval *timeout)
+int WINAPI WS_select(int nfds, WS_fd_set *ws_readfds,
+                     WS_fd_set *ws_writefds, WS_fd_set *ws_exceptfds,
+                     const struct WS_timeval* timeout)
 {
     /* struct timeval is the same for both 32- and 16-bit code */
     return (INT)__ws_select( TRUE, ws_readfds, ws_writefds, ws_exceptfds, timeout );
@@ -1958,7 +1978,7 @@
 /***********************************************************************
  *		send			(WS2_32.19)
  */
-INT WINAPI WSOCK32_send(SOCKET s, char *buf, INT len, INT flags)
+int WINAPI WS_send(SOCKET s, const char *buf, int len, int flags)
 {
     int fd = _get_sock_fd(s);
 
@@ -2024,7 +2044,7 @@
   /* Send all buffers with the same flags */
   for(dwCount = 0; dwCount < dwBufferCount; dwCount++ )
   {
-    if( ( rc = WSOCK32_send( s, lpBuffers[ dwCount ].buf, 
+    if( ( rc = WS_send( s, lpBuffers[ dwCount ].buf, 
                              lpBuffers[ dwCount ].len, iFlags ) ) != 0 )
     {
       break;
@@ -2042,14 +2062,14 @@
  */
 INT16 WINAPI WINSOCK_send16(SOCKET16 s, char *buf, INT16 len, INT16 flags)
 {
-    return WSOCK32_send( s, buf, len, flags );
+    return WS_send( s, buf, len, flags );
 }
 
 /***********************************************************************
  *		sendto		(WS2_32.20)
  */
-int WINAPI WSOCK32_sendto(SOCKET s, const char *buf, int len, int flags,
-                              const ws_sockaddr *to, int tolen)
+int WINAPI WS_sendto(SOCKET s, const char *buf, int len, int flags,
+                              const struct WS_sockaddr *to, int tolen)
 {
     int fd = _get_sock_fd(s);
     int res;
@@ -2097,16 +2117,16 @@
  *              sendto		(WINSOCK.20)
  */
 INT16 WINAPI WINSOCK_sendto16(SOCKET16 s, char *buf, INT16 len, INT16 flags,
-                              ws_sockaddr *to, INT16 tolen)
+                              struct WS_sockaddr *to, INT16 tolen)
 {
-    return (INT16)WSOCK32_sendto( s, buf, len, flags, to, tolen );
+    return (INT16)WS_sendto( s, buf, len, flags, to, tolen );
 }
 
 /***********************************************************************
  *		setsockopt		(WS2_32.21)
  */
-INT WINAPI WSOCK32_setsockopt(SOCKET16 s, INT level, INT optname, 
-                                  char *optval, INT optlen)
+int WINAPI WS_setsockopt(SOCKET s, int level, int optname, 
+                                  const char *optval, int optlen)
 {
     int fd = _get_sock_fd(s);
 
@@ -2144,7 +2164,7 @@
                 /* FIXME: what is documented behavior if SO_LINGER optval
                    is null?? */
                 optval = (char*)&linger;
-                optlen = sizeof(struct linger);
+                optlen = sizeof(struct WS_linger);
             } else if (optlen < sizeof(int)){
                 woptval= *((INT16 *) optval);
                 optval= (char*) &woptval;
@@ -2176,14 +2196,14 @@
                                   char *optval, INT16 optlen)
 {
     if( !optval ) return SOCKET_ERROR;
-    return (INT16)WSOCK32_setsockopt( s, (UINT16)level, optname, optval, optlen );
+    return (INT16)WS_setsockopt( s, (UINT16)level, optname, optval, optlen );
 }
 
 
 /***********************************************************************
  *		shutdown		(WS2_32.22)
  */
-INT WINAPI WSOCK32_shutdown(SOCKET s, INT how)
+int WINAPI WS_shutdown(SOCKET s, int how)
 {
     int fd = _get_sock_fd(s);
 
@@ -2236,14 +2256,14 @@
  */
 INT16 WINAPI WINSOCK_shutdown16(SOCKET16 s, INT16 how)
 {
-    return (INT16)WSOCK32_shutdown( s, how );
+    return (INT16)WS_shutdown( s, how );
 }
 
 
 /***********************************************************************
  *		socket		(WS2_32.23)
  */
-SOCKET WINAPI WSOCK32_socket(INT af, INT type, INT protocol)
+SOCKET WINAPI WS_socket(int af, int type, int protocol)
 {
     SOCKET ret;
 
@@ -2326,7 +2346,7 @@
  */
 SOCKET16 WINAPI WINSOCK_socket16(INT16 af, INT16 type, INT16 protocol)
 {
-    return (SOCKET16)WSOCK32_socket( af, type, protocol );
+    return (SOCKET16)WS_socket( af, type, protocol );
 }
     
 
@@ -2398,8 +2418,8 @@
 /***********************************************************************
  *		gethostbyaddr		(WS2_32.51)
  */
-WIN_hostent* WINAPI WSOCK32_gethostbyaddr(const char *addr, INT len,
-                                                INT type)
+struct WS_hostent* WINAPI WS_gethostbyaddr(const char *addr, int len,
+                                                int type)
 {
     TRACE("ptr %08x, len %d, type %d\n",
                              (unsigned) addr, len, type);
@@ -2460,7 +2480,7 @@
 /***********************************************************************
  *		gethostbyname		(WS2_32.52)
  */
-WIN_hostent* WINAPI WSOCK32_gethostbyname(const char* name)
+struct WS_hostent* WINAPI WS_gethostbyname(const char* name)
 {
     TRACE("%s\n", (name)?name:NULL_STRING);
     return __ws_gethostbyname( name, WS_DUP_LINEAR );
@@ -2505,7 +2525,7 @@
 /***********************************************************************
  *		getprotobyname		(WS2_32.53)
  */
-WIN_protoent* WINAPI WSOCK32_getprotobyname(const char* name)
+struct WS_protoent* WINAPI WS_getprotobyname(const char* name)
 {
     TRACE("%s\n", (name)?name:NULL_STRING);
     return __ws_getprotobyname(name, WS_DUP_LINEAR);
@@ -2549,7 +2569,7 @@
 /***********************************************************************
  *		getprotobynumber	(WS2_32.54)
  */
-WIN_protoent* WINAPI WSOCK32_getprotobynumber(INT number)
+struct WS_protoent* WINAPI WS_getprotobynumber(int number)
 {
     TRACE("%i\n", number);
     return __ws_getprotobynumber(number, WS_DUP_LINEAR);
@@ -2602,7 +2622,7 @@
 /***********************************************************************
  *		getservbyname		(WS2_32.55)
  */
-WIN_servent* WINAPI WSOCK32_getservbyname(const char *name, const char *proto)
+struct WS_servent* WINAPI WS_getservbyname(const char *name, const char *proto)
 {
     TRACE("'%s', '%s'\n",
                             (name)?name:NULL_STRING, (proto)?proto:NULL_STRING);
@@ -2651,7 +2671,7 @@
 /***********************************************************************
  *		getservbyport		(WS2_32.56)
  */
-WIN_servent* WINAPI WSOCK32_getservbyport(INT port, const char *proto)
+struct WS_servent* WINAPI WS_getservbyport(int port, const char *proto)
 {
     TRACE("%d (i.e. port %d), '%s'\n",
                             (int)port, (int)ntohl(port), (proto)?proto:NULL_STRING);
@@ -2662,7 +2682,7 @@
 /***********************************************************************
  *              gethostname           (WS2_32.57)
  */
-INT WINAPI WSOCK32_gethostname(char *name, INT namelen)
+int WINAPI WS_gethostname(char *name, int namelen)
 {
     TRACE("name %p, len %d\n", name, namelen);
 
@@ -2681,7 +2701,7 @@
  */
 INT16 WINAPI WINSOCK_gethostname16(char *name, INT16 namelen)
 {
-    return (INT16)WSOCK32_gethostname(name, namelen);
+    return (INT16)WS_gethostname(name, namelen);
 }
 
 
@@ -2861,7 +2881,8 @@
  *
  * See description for WSARecvEx()
  */
-INT16     WINAPI WSARecvEx16(SOCKET16 s, char *buf, INT16 len, INT16 *flags) {
+INT16     WINAPI WSARecvEx16(SOCKET16 s, char *buf, INT16 len, INT16 *flags)
+{
   FIXME("(WSARecvEx16) partial packet return value not set \n");
 
   return WINSOCK_recv16(s, buf, len, *flags);
@@ -2907,7 +2928,7 @@
    TRACE("af=%d type=%d protocol=%d protocol_info=%p group=%d flags=0x%lx\n", 
          af, type, protocol, lpProtocolInfo, g, dwFlags );
 
-   return ( WSOCK32_socket (af, type, protocol) );
+   return ( WS_socket (af, type, protocol) );
 }
 
 
@@ -2928,7 +2949,7 @@
 /***********************************************************************
  *      __WSAFDIsSet			(WS2_32.151)
  */
-INT WINAPI __WSAFDIsSet(SOCKET s, ws_fd_set32 *set)
+int WINAPI __WSAFDIsSet(SOCKET s, WS_fd_set *set)
 {
   int i = set->fd_count;
 
@@ -3080,7 +3101,7 @@
 	char *p_name,*p_aliases,*p_addr,*p_base,*p;
 	char *p_to;
 	struct ws_hostent16 *p_to16;
-	struct ws_hostent32 *p_to32;
+	struct WS_hostent *p_to32;
 
 	check_buffer_he(size);
 	p_to = he_buffer;
@@ -3091,7 +3112,7 @@
 	p_base = (flag & WS_DUP_OFFSET) ? NULL
 	    : ((flag & WS_DUP_SEGPTR) ? (char*)SEGPTR_GET(p) : p);
 	p += (flag & WS_DUP_SEGPTR) ?
-	    sizeof(struct ws_hostent16) : sizeof(struct ws_hostent32);
+	    sizeof(struct ws_hostent16) : sizeof(struct WS_hostent);
 	p_name = p;
 	strcpy(p, p_he->h_name); p += strlen(p) + 1;
 	p_aliases = p;
@@ -3115,7 +3136,7 @@
 	    p_to32->h_name = (p_base + (p_name - p_to));
 	    p_to32->h_aliases = (char **)(p_base + (p_aliases - p_to));
 	    p_to32->h_addr_list = (char **)(p_base + (p_addr - p_to));
-	    size += (sizeof(struct ws_hostent32) - sizeof(struct hostent));
+	    size += (sizeof(struct WS_hostent) - sizeof(struct hostent));
 	}
     }
     return size;
@@ -3140,7 +3161,7 @@
     {
 	char *p_to;
 	struct ws_protoent16 *p_to16;
-	struct ws_protoent32 *p_to32;
+	struct WS_protoent *p_to32;
 	char *p_name,*p_aliases,*p_base,*p;
 
 	check_buffer_pe(size);
@@ -3151,7 +3172,7 @@
 	p_base = (flag & WS_DUP_OFFSET) ? NULL
 	    : ((flag & WS_DUP_SEGPTR) ? (char*)SEGPTR_GET(p) : p);
 	p += (flag & WS_DUP_SEGPTR) ?
-	    sizeof(struct ws_protoent16) : sizeof(struct ws_protoent32);
+	    sizeof(struct ws_protoent16) : sizeof(struct WS_protoent);
 	p_name = p;
 	strcpy(p, p_pe->p_name); p += strlen(p) + 1;
 	p_aliases = p;
@@ -3169,7 +3190,7 @@
 	    p_to32->p_proto = p_pe->p_proto;
 	    p_to32->p_name = (p_base) + (p_name - p_to);
 	    p_to32->p_aliases = (char **)((p_base) + (p_aliases - p_to)); 
-	    size += (sizeof(struct ws_protoent32) - sizeof(struct protoent));
+	    size += (sizeof(struct WS_protoent) - sizeof(struct protoent));
 	}
     }
     return size;
@@ -3195,7 +3216,7 @@
 	char *p_name,*p_aliases,*p_proto,*p_base,*p;
 	char *p_to;
 	struct ws_servent16 *p_to16;
-	struct ws_servent32 *p_to32;
+	struct WS_servent *p_to32;
 
 	check_buffer_se(size);
 	p_to = se_buffer;
@@ -3205,7 +3226,7 @@
 	p_base = (flag & WS_DUP_OFFSET) ? NULL 
 	    : ((flag & WS_DUP_SEGPTR) ? (char*)SEGPTR_GET(p) : p);
 	p += (flag & WS_DUP_SEGPTR) ?
-	    sizeof(struct ws_servent16) : sizeof(struct ws_servent32);
+	    sizeof(struct ws_servent16) : sizeof(struct WS_servent);
 	p_name = p;
 	strcpy(p, p_se->s_name); p += strlen(p) + 1;
 	p_proto = p;
@@ -3227,7 +3248,7 @@
 	    p_to32->s_name = (p_base + (p_name - p_to));
 	    p_to32->s_proto = (p_base + (p_proto - p_to));
 	    p_to32->s_aliases = (char **)(p_base + (p_aliases - p_to));
-	    size += (sizeof(struct ws_servent32) - sizeof(struct servent));
+	    size += (sizeof(struct WS_servent) - sizeof(struct servent));
 	}
     }
     return size;
@@ -3331,7 +3352,7 @@
  *              WSARecvFrom             (WS2_32.69)
  */
 INT WINAPI WSARecvFrom( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
-                        LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr *lpFrom,
+                        LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct WS_sockaddr *lpFrom,
                         LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped,
                         LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine )
 {
@@ -3345,7 +3366,7 @@
   for( dwCount = 0, rc = 0; dwCount < dwBufferCount; dwCount++ )
   {
 
-    if( ( rc = WSOCK32_recvfrom(s, lpBuffers[ dwCount ].buf, (INT)lpBuffers[ dwCount ].len,
+    if( ( rc = WS_recvfrom(s, lpBuffers[ dwCount ].buf, (INT)lpBuffers[ dwCount ].len,
                                 (INT)*lpFlags, lpFrom, lpFromlen ) ) != 0 )
     {
        break;