winsock.h revision 589fd26cedb2b4ebbed14f2964cad03cc8ebbca2
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/* WINSOCK.H--definitions to be used with the WINSOCK.DLL
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * This header file corresponds to version 1.1 of the Windows Sockets
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * specification.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Copyright (C) the Wine project
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * This library is free software; you can redistribute it and/or
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * modify it under the terms of the GNU Lesser General Public
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * License as published by the Free Software Foundation; either
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * version 2.1 of the License, or (at your option) any later version.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * This library is distributed in the hope that it will be useful,
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * but WITHOUT ANY WARRANTY; without even the implied warranty of
dbcf55756e293292dfbfbb75fe317dd094b0585fjeff.schenk * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dbcf55756e293292dfbfbb75fe317dd094b0585fjeff.schenk * Lesser General Public License for more details.
dbcf55756e293292dfbfbb75fe317dd094b0585fjeff.schenk * You should have received a copy of the GNU Lesser General Public
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * License along with this library; if not, write to the Free Software
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Sun LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * other than GPL or LGPL is available it will apply instead, Sun elects to use only
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * a choice of LGPL license versions is made available with the language indicating
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * that LGPLv2 or any later version may be used, or where a choice of which version
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * of the LGPL is applied is otherwise unspecified.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * This section defines the items that conflict with the Unix headers.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/* We are not using the WS_ prefix we risk getting conflicts for
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * everything related to select.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/* Too late, the Unix version of stdlib.h was included before winsock.h.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * This means select and all the related stuff is already defined and we
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * cannot override types and function prototypes.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * All we can do is disable all these symbols so that they are not used
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * inadvertently.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# define FD_SETSIZE Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# define FD_CLR Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# define FD_SET Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# define FD_ZERO Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# define FD_ISSET Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# define fd_set Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# define select Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/* On Darwin stdlib.h includes sys/resource.h which defines timeval but not the fd_set macros */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# define select Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# define timeval Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# else /* FD_CLR */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/* stdlib.h has not been included yet so it's not too late. Include it now
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * making sure that none of the select symbols is affected. Then we can
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * define them with our own values.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# endif /* FD_CLR */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* !USE_WS_PREFIX */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* __WINE_WINSOCKAPI_STDLIB_H */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef unsigned char WS_u_char;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef unsigned short WS_u_short;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef unsigned int WS_u_int;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef unsigned long WS_u_long;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef unsigned int WS_u_long;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#elif (defined(_MSC_VER) || defined(__MINGW32__) || defined(__WATCOMC__)) && !defined(_BSDTYPES_DEFINED)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/* MinGW doesn't define the u_xxx types */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef unsigned char u_char;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef unsigned short u_short;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef unsigned int u_int;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef unsigned long u_long;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef unsigned int u_long;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk# define WS(x) x
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* defined(__cplusplus) */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Address families
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#else /* USE_WS_PREFIX */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* USE_WS_PREFIX */
dbcf55756e293292dfbfbb75fe317dd094b0585fjeff.schenk#else /* USE_WS_PREFIX */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* USE_WS_PREFIX */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#else /* USE_WS_PREFIX */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* USE_WS_PREFIX */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#else /* USE_WS_PREFIX */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* USE_WS_PREFIX */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk char** h_addr_list; /* list of addresses from name server */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define h_addr h_addr_list[0] /* address, for backward compat */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * This is used instead of -1, since the
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * SOCKET type is unsigned.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/* Define our own version of select and the associated types and macros */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk SOCKET fd_array[FD_SETSIZE]; /* an array of SOCKETs */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk SOCKET fd_array[WS_FD_SETSIZE];/* an array of SOCKETs */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk unsigned int __i; \
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk ((cast*)(set))->fd_array[((cast*)(set))->fd_count++]=(fd); \
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/* This version checks if the filedesc is already in the list, and appends it
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * only if it's not the case
dbcf55756e293292dfbfbb75fe317dd094b0585fjeff.schenk unsigned int __i; \
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk if (__i == ((cast*)(set))->fd_count && ((cast*)(set))->fd_count < FD_SETSIZE) \
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define __WS_FD_SET(fd, set, cast) __WS_FD_SET1((fd),(set), cast)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define __WS_FD_SET(fd, set, cast) __WS_FD_SET2((fd),(set), cast)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define FD_CLR(fd, set) __WS_FD_CLR((fd),(set), fd_set)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define FD_SET(fd, set) __WS_FD_SET((fd),(set), fd_set)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define FD_ZERO(set) (((fd_set*)(set))->fd_count=0)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set*)(set))
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define WS_FD_CLR(fd, set) __WS_FD_CLR((fd),(set), WS_fd_set)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define WS_FD_SET(fd, set) __WS_FD_SET((fd),(set), WS_fd_set)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define WS_FD_ZERO(set) (((WS_fd_set*)(set))->fd_count=0)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define WS_FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (WS_fd_set*)(set))
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* WS_DEFINE_SELECT */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/* we have to define hton/ntoh as macros to avoid conflicts with Unix headers */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#else /* WORDS_BIGENDIAN */
dbcf55756e293292dfbfbb75fe317dd094b0585fjeff.schenkstatic inline u_short __wine_ushort_swap(u_short s)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return ((u_long)__wine_ushort_swap((u_short)l) << 16) | __wine_ushort_swap((u_short)(l >> 16));
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* WORDS_BIGENDIAN */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* USE_WS_PREFIX */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Internet address (old style... should be updated)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define IN_CLASSA(i) (((LONG)(i) & 0x80000000) == 0)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define IN_CLASSB(i) (((LONG)(i) & 0xc0000000) == 0x80000000)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define IN_CLASSC(i) (((LONG)(i) & 0xe0000000) == 0xc0000000)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define WS_IN_CLASSA(i) (((LONG)(i) & 0x80000000) == 0)
#ifndef USE_WS_PREFIX
} S_un_b;
} S_un_w;
} S_un;
#ifndef USE_WS_PREFIX
short sin_family;
#if !defined(__WINE_WINSOCK2__)
#ifdef _WIN64
char *lpVendorInfo;
char *lpVendorInfo;
#ifndef USE_WS_PREFIX
#ifndef USE_WS_PREFIX
# ifndef USE_WS_PREFIX
#ifndef USE_WS_PREFIX
#ifndef USE_WS_PREFIX
#ifndef USE_WS_PREFIX
#ifdef __WINESRC__
#ifndef USE_WS_PREFIX
#ifndef USE_WS_PREFIX
* "Winsock Function Typedefs" section in winsock2.h.
/* gethostname not defined because of conflicts with unistd.h */
#ifdef WS_DEFINE_SELECT
#ifdef __cplusplus
#ifndef __WINE_WINSOCK2__