af062818b47340eef15700d2f0211576ba3506eevboxsync/* WINSOCK.H--definitions to be used with the WINSOCK.DLL
af062818b47340eef15700d2f0211576ba3506eevboxsync * This header file corresponds to version 1.1 of the Windows Sockets
af062818b47340eef15700d2f0211576ba3506eevboxsync * specification.
af062818b47340eef15700d2f0211576ba3506eevboxsync * Copyright (C) the Wine project
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is free software; you can redistribute it and/or
af062818b47340eef15700d2f0211576ba3506eevboxsync * modify it under the terms of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License as published by the Free Software Foundation; either
af062818b47340eef15700d2f0211576ba3506eevboxsync * version 2.1 of the License, or (at your option) any later version.
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is distributed in the hope that it will be useful,
af062818b47340eef15700d2f0211576ba3506eevboxsync * but WITHOUT ANY WARRANTY; without even the implied warranty of
af062818b47340eef15700d2f0211576ba3506eevboxsync * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
af062818b47340eef15700d2f0211576ba3506eevboxsync * Lesser General Public License for more details.
af062818b47340eef15700d2f0211576ba3506eevboxsync * You should have received a copy of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License along with this library; if not, write to the Free Software
af062818b47340eef15700d2f0211576ba3506eevboxsync * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * a choice of LGPL license versions is made available with the language indicating
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * that LGPLv2 or any later version may be used, or where a choice of which version
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * of the LGPL is applied is otherwise unspecified.
af062818b47340eef15700d2f0211576ba3506eevboxsync * This section defines the items that conflict with the Unix headers.
af062818b47340eef15700d2f0211576ba3506eevboxsync/* We are not using the WS_ prefix we risk getting conflicts for
af062818b47340eef15700d2f0211576ba3506eevboxsync * everything related to select.
af062818b47340eef15700d2f0211576ba3506eevboxsync/* Too late, the Unix version of stdlib.h was included before winsock.h.
af062818b47340eef15700d2f0211576ba3506eevboxsync * This means select and all the related stuff is already defined and we
af062818b47340eef15700d2f0211576ba3506eevboxsync * cannot override types and function prototypes.
af062818b47340eef15700d2f0211576ba3506eevboxsync * All we can do is disable all these symbols so that they are not used
af062818b47340eef15700d2f0211576ba3506eevboxsync * inadvertently.
af062818b47340eef15700d2f0211576ba3506eevboxsync# define FD_SETSIZE Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
af062818b47340eef15700d2f0211576ba3506eevboxsync# define FD_CLR Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
af062818b47340eef15700d2f0211576ba3506eevboxsync# define FD_SET Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
af062818b47340eef15700d2f0211576ba3506eevboxsync# define FD_ZERO Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
af062818b47340eef15700d2f0211576ba3506eevboxsync# define FD_ISSET Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
af062818b47340eef15700d2f0211576ba3506eevboxsync# define fd_set Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
af062818b47340eef15700d2f0211576ba3506eevboxsync# define select Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
af062818b47340eef15700d2f0211576ba3506eevboxsync/* On Darwin stdlib.h includes sys/resource.h which defines timeval but not the fd_set macros */
af062818b47340eef15700d2f0211576ba3506eevboxsync# define select Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library
af062818b47340eef15700d2f0211576ba3506eevboxsync# define timeval Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library
af062818b47340eef15700d2f0211576ba3506eevboxsync# else /* FD_CLR */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* stdlib.h has not been included yet so it's not too late. Include it now
af062818b47340eef15700d2f0211576ba3506eevboxsync * making sure that none of the select symbols is affected. Then we can
af062818b47340eef15700d2f0211576ba3506eevboxsync * define them with our own values.
af062818b47340eef15700d2f0211576ba3506eevboxsync# endif /* FD_CLR */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* !USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* __WINE_WINSOCKAPI_STDLIB_H */
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync#elif (defined(_MSC_VER) || defined(__MINGW32__) || defined(__WATCOMC__)) && !defined(_BSDTYPES_DEFINED)
af062818b47340eef15700d2f0211576ba3506eevboxsync/* MinGW doesn't define the u_xxx types */
ee6bcfc59fe3b0230aad85e2ef63d0402b7719b2vboxsync#define u_long ULONG /* make sure we don't use the system u_long */
af062818b47340eef15700d2f0211576ba3506eevboxsyncextern "C" {
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* defined(__cplusplus) */
af062818b47340eef15700d2f0211576ba3506eevboxsync * Address families
af062818b47340eef15700d2f0211576ba3506eevboxsync#else /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync#else /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync * Protocols
af062818b47340eef15700d2f0211576ba3506eevboxsync#else /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync#else /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync char** h_addr_list; /* list of addresses from name server */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define h_addr h_addr_list[0] /* address, for backward compat */
af062818b47340eef15700d2f0211576ba3506eevboxsync * This is used instead of -1, since the
af062818b47340eef15700d2f0211576ba3506eevboxsync * SOCKET type is unsigned.
af062818b47340eef15700d2f0211576ba3506eevboxsync/* Define our own version of select and the associated types and macros */
af062818b47340eef15700d2f0211576ba3506eevboxsync SOCKET fd_array[FD_SETSIZE]; /* an array of SOCKETs */
af062818b47340eef15700d2f0211576ba3506eevboxsync SOCKET fd_array[WS_FD_SETSIZE];/* an array of SOCKETs */
af062818b47340eef15700d2f0211576ba3506eevboxsync unsigned int __i; \
af062818b47340eef15700d2f0211576ba3506eevboxsync for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \
af062818b47340eef15700d2f0211576ba3506eevboxsync ((cast*)(set))->fd_array[((cast*)(set))->fd_count++]=(fd); \
af062818b47340eef15700d2f0211576ba3506eevboxsync/* This version checks if the filedesc is already in the list, and appends it
af062818b47340eef15700d2f0211576ba3506eevboxsync * only if it's not the case
af062818b47340eef15700d2f0211576ba3506eevboxsync unsigned int __i; \
af062818b47340eef15700d2f0211576ba3506eevboxsync for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \
af062818b47340eef15700d2f0211576ba3506eevboxsync if (__i == ((cast*)(set))->fd_count && ((cast*)(set))->fd_count < FD_SETSIZE) \
af062818b47340eef15700d2f0211576ba3506eevboxsync#define __WS_FD_SET(fd, set, cast) __WS_FD_SET1((fd),(set), cast)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define __WS_FD_SET(fd, set, cast) __WS_FD_SET2((fd),(set), cast)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define FD_CLR(fd, set) __WS_FD_CLR((fd),(set), fd_set)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define FD_SET(fd, set) __WS_FD_SET((fd),(set), fd_set)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set*)(set))
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_FD_CLR(fd, set) __WS_FD_CLR((fd),(set), WS_fd_set)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_FD_SET(fd, set) __WS_FD_SET((fd),(set), WS_fd_set)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_FD_ZERO(set) (((WS_fd_set*)(set))->fd_count=0)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (WS_fd_set*)(set))
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* WS_DEFINE_SELECT */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* we have to define hton/ntoh as macros to avoid conflicts with Unix headers */
af062818b47340eef15700d2f0211576ba3506eevboxsync#else /* WORDS_BIGENDIAN */
ee6bcfc59fe3b0230aad85e2ef63d0402b7719b2vboxsync return ((ULONG)__wine_ushort_swap((u_short)l) << 16) | __wine_ushort_swap((u_short)(l >> 16));
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* WORDS_BIGENDIAN */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync * Internet address (old style... should be updated)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define IN_CLASSA(i) (((LONG)(i) & 0x80000000) == 0)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define IN_CLASSB(i) (((LONG)(i) & 0xc0000000) == 0x80000000)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define IN_CLASSC(i) (((LONG)(i) & 0xe0000000) == 0xc0000000)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_IN_CLASSA(i) (((LONG)(i) & 0x80000000) == 0)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_IN_CLASSB(i) (((LONG)(i) & 0xc0000000) == 0x80000000)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_IN_CLASSC(i) (((LONG)(i) & 0xe0000000) == 0xc0000000)
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync * Multicast group information
af062818b47340eef15700d2f0211576ba3506eevboxsync * WSAStartup
af062818b47340eef15700d2f0211576ba3506eevboxsync * {get,set}sockopt
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_EXCLUSIVEADDRUSE ((u_int)(~SO_REUSEADDR))
af062818b47340eef15700d2f0211576ba3506eevboxsync#define _IOR(x,y,t) (IOC_OUT|(((UINT)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
af062818b47340eef15700d2f0211576ba3506eevboxsync#define _IOW(x,y,t) (IOC_IN|(((UINT)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_EXCLUSIVEADDRUSE ((WS_u_int)(~WS_SO_REUSEADDR))
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_DONTLINGER ((WS_u_int)(~WS_SO_LINGER))
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS__IOR(x,y,t) (WS_IOC_OUT|(((LONG)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS__IOW(x,y,t) (WS_IOC_IN|(((LONG)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))
af062818b47340eef15700d2f0211576ba3506eevboxsync/* IPPROTO_TCP options */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* IPPROTO_IP options */
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef __WINE_WINSOCK2__ /* WinSock2 has different values for the IP_ constants */
af062818b47340eef15700d2f0211576ba3506eevboxsync * Socket I/O flags (supported by spec 1.1)
af062818b47340eef15700d2f0211576ba3506eevboxsync * Maximum queue length specifiable by listen.
af062818b47340eef15700d2f0211576ba3506eevboxsync#else /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync * Define constant based on rfc883, used by gethostbyxxxx() calls.
af062818b47340eef15700d2f0211576ba3506eevboxsync * Define flags to be used with the WSAAsyncSelect() call.
af062818b47340eef15700d2f0211576ba3506eevboxsync/* internal per-socket flags */
af062818b47340eef15700d2f0211576ba3506eevboxsync * All Windows Sockets error constants are biased by WSABASEERR from
ee6bcfc59fe3b0230aad85e2ef63d0402b7719b2vboxsync * the "normal". They are also defined in winerror.h.
af062818b47340eef15700d2f0211576ba3506eevboxsync * Windows Sockets definitions of regular Microsoft C error constants
af062818b47340eef15700d2f0211576ba3506eevboxsync * Windows Sockets definitions of regular Berkeley error constants
af062818b47340eef15700d2f0211576ba3506eevboxsync * Extended Windows Sockets error constant definitions
af062818b47340eef15700d2f0211576ba3506eevboxsync * Error return codes from gethostbyname() and gethostbyaddr()
af062818b47340eef15700d2f0211576ba3506eevboxsync * (when using the resolver). Note that these errors are
af062818b47340eef15700d2f0211576ba3506eevboxsync * retrieved via WSAGetLastError() and must therefore follow
af062818b47340eef15700d2f0211576ba3506eevboxsync * the rules for avoiding clashes with error numbers from
af062818b47340eef15700d2f0211576ba3506eevboxsync * specific implementations or language run-time systems.
af062818b47340eef15700d2f0211576ba3506eevboxsync * For this reason the codes are based at WSABASEERR+1001.
af062818b47340eef15700d2f0211576ba3506eevboxsync * Note also that [WSA]NO_ADDRESS is defined only for
af062818b47340eef15700d2f0211576ba3506eevboxsync * compatibility purposes.
af062818b47340eef15700d2f0211576ba3506eevboxsync/* Authoritative Answer: Host not found */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* Non-Authoritative: Host not found, or SERVERFAIL */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* Valid name, no data record of requested type */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* no address, look for MX record */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* USE_WS_PREFIX */
af062818b47340eef15700d2f0211576ba3506eevboxsync * Windows message parameter composition and decomposition
af062818b47340eef15700d2f0211576ba3506eevboxsync * WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation
af062818b47340eef15700d2f0211576ba3506eevboxsync * when constructing the response to a WSAAsyncGetXByY() routine.
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WSAMAKEASYNCREPLY(buflen,error) MAKELONG(buflen,error)
af062818b47340eef15700d2f0211576ba3506eevboxsync * WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
af062818b47340eef15700d2f0211576ba3506eevboxsync * when constructing the response to WSAAsyncSelect().
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WSAMAKESELECTREPLY(event,error) MAKELONG(event,error)
af062818b47340eef15700d2f0211576ba3506eevboxsync * WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application
af062818b47340eef15700d2f0211576ba3506eevboxsync * to extract the buffer length from the lParam in the response
af062818b47340eef15700d2f0211576ba3506eevboxsync * to a WSAGetXByY().
af062818b47340eef15700d2f0211576ba3506eevboxsync * WSAGETASYNCERROR is intended for use by the Windows Sockets application
af062818b47340eef15700d2f0211576ba3506eevboxsync * to extract the error code from the lParam in the response
af062818b47340eef15700d2f0211576ba3506eevboxsync * to a WSAGetXByY().
af062818b47340eef15700d2f0211576ba3506eevboxsync * WSAGETSELECTEVENT is intended for use by the Windows Sockets application
af062818b47340eef15700d2f0211576ba3506eevboxsync * to extract the event code from the lParam in the response
af062818b47340eef15700d2f0211576ba3506eevboxsync * to a WSAAsyncSelect().
af062818b47340eef15700d2f0211576ba3506eevboxsync * WSAGETSELECTERROR is intended for use by the Windows Sockets application
af062818b47340eef15700d2f0211576ba3506eevboxsync * to extract the error code from the lParam in the response
af062818b47340eef15700d2f0211576ba3506eevboxsync * to a WSAAsyncSelect().
af062818b47340eef15700d2f0211576ba3506eevboxsync * Prototypes
af062818b47340eef15700d2f0211576ba3506eevboxsync * Remember to keep this section in sync with the
af062818b47340eef15700d2f0211576ba3506eevboxsync * "Winsock Function Typedefs" section in winsock2.h.
af062818b47340eef15700d2f0211576ba3506eevboxsync#if !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES
af062818b47340eef15700d2f0211576ba3506eevboxsyncHANDLE WINAPI WSAAsyncGetHostByAddr(HWND,WS(u_int),const char*,int,int,char*,int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncHANDLE WINAPI WSAAsyncGetHostByName(HWND,WS(u_int),const char*,char*,int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncHANDLE WINAPI WSAAsyncGetProtoByName(HWND,WS(u_int),const char*,char*,int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncHANDLE WINAPI WSAAsyncGetProtoByNumber(HWND,WS(u_int),int,char*,int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncHANDLE WINAPI WSAAsyncGetServByName(HWND,WS(u_int),const char*,const char*,char*,int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncHANDLE WINAPI WSAAsyncGetServByPort(HWND,WS(u_int),int,const char*,char*,int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncint WINAPI WSAAsyncSelect(SOCKET,HWND,WS(u_int),LONG);
af062818b47340eef15700d2f0211576ba3506eevboxsyncSOCKET WINAPI WS(accept)(SOCKET,struct WS(sockaddr)*,int*);
af062818b47340eef15700d2f0211576ba3506eevboxsyncint WINAPI WS(bind)(SOCKET,const struct WS(sockaddr)*,int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncint WINAPI WS(connect)(SOCKET,const struct WS(sockaddr)*,int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncstruct WS(hostent)* WINAPI WS(gethostbyaddr)(const char*,int,int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncstruct WS(hostent)* WINAPI WS(gethostbyname)(const char*);
af062818b47340eef15700d2f0211576ba3506eevboxsync/* gethostname not defined because of conflicts with unistd.h */
af062818b47340eef15700d2f0211576ba3506eevboxsyncint WINAPI WS(getpeername)(SOCKET,struct WS(sockaddr)*,int*);
af062818b47340eef15700d2f0211576ba3506eevboxsyncstruct WS(protoent)* WINAPI WS(getprotobyname)(const char*);
af062818b47340eef15700d2f0211576ba3506eevboxsyncstruct WS(protoent)* WINAPI WS(getprotobynumber)(int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncint WINAPI WS(select)(int,WS(fd_set)*,WS(fd_set)*,WS(fd_set)*,const struct WS(timeval)*);
af062818b47340eef15700d2f0211576ba3506eevboxsyncstruct WS(servent)* WINAPI WS(getservbyname)(const char*,const char*);
af062818b47340eef15700d2f0211576ba3506eevboxsyncstruct WS(servent)* WINAPI WS(getservbyport)(int,const char*);
af062818b47340eef15700d2f0211576ba3506eevboxsyncint WINAPI WS(getsockname)(SOCKET,struct WS(sockaddr)*,int*);
af062818b47340eef15700d2f0211576ba3506eevboxsyncint WINAPI WS(getsockopt)(SOCKET,int,int,char*,int*);
af062818b47340eef15700d2f0211576ba3506eevboxsyncint WINAPI WS(recvfrom)(SOCKET,char*,int,int,struct WS(sockaddr)*,int*);
af062818b47340eef15700d2f0211576ba3506eevboxsyncint WINAPI WS(sendto)(SOCKET,const char*,int,int,const struct WS(sockaddr)*,int);
af062818b47340eef15700d2f0211576ba3506eevboxsyncint WINAPI WS(setsockopt)(SOCKET,int,int,const char*,int);
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES */
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* _WINSOCKAPI_ */