/* * winsock.h Windows Sockets functions * * ========================================================================= * * Open Watcom Project * * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved. * * This file is automatically generated. Do not edit directly. * * ========================================================================= */ #ifndef _WINSOCKAPI_ #define _WINSOCKAPI_ #ifndef _ENABLE_AUTODEPEND #pragma read_only_file; #endif #ifndef _WINDOWS_ #include #endif #include #include #ifdef __cplusplus extern "C" { #endif /* Primitive types from Unix */ typedef unsigned char u_char; typedef unsigned short u_short; typedef unsigned int u_int; typedef unsigned long u_long; /* Socket data type */ typedef UINT_PTR SOCKET; /* Number of sockets in fd_set (can be overriden by the user) */ #ifndef FD_SETSIZE #define FD_SETSIZE 64 #endif /* Flags to define ioctlsocket() commands */ #define IOCPARM_MASK 0x0000007F #define IOC_VOID 0x20000000 #define IOC_OUT 0x40000000 #define IOC_IN 0x80000000 #define IOC_INOUT (IOC_IN | IOC_OUT) /* Macros to define ioctlsocket() commands */ #define _IO( p1, p2 ) (IOC_VOID | ((p1) << 8) | (p2)) #define _IOR( p1, p2, p3 ) \ (IOC_OUT | (((long)sizeof( p3 ) & IOCPARM_MASK) << 16) | ((p1) << 8) | (p2)) #define _IOW( p1, p2, p3 ) \ (IOC_IN | (((long)sizeof( p3 ) & IOCPARM_MASK) << 16) | ((p1) << 8) | (p2)) /* Commands for ioctlsocket() */ #define FIONREAD _IOR( 'f', 127, u_long ) #define FIONBIO _IOW( 'f', 126, u_long ) #define FIOASYNC _IOW( 'f', 125, u_long ) #define SIOCSHIWAT _IOW( 's', 0, u_long ) #define SIOCGHIWAT _IOR( 's', 1, u_long ) #define SIOCSLOWAT _IOW( 's', 2, u_long ) #define SIOCGLOWAT _IOR( 's', 3, u_long ) #define SIOCATMARK _IOR( 's', 7, u_long ) /* IP protocols */ #define IPPROTO_IP 0 #define IPPROTO_ICMP 1 #define IPPROTO_IGMP 2 #define IPPROTO_GGP 3 #define IPPROTO_TCP 6 #define IPPROTO_PUP 12 #define IPPROTO_UDP 17 #define IPPROTO_IDP 22 #define IPPROTO_ND 77 #define IPPROTO_RAW 255 #define IPPROTO_MAX 256 /* IP port numbers */ #define IPPORT_ECHO 7 #define IPPORT_DISCARD 9 #define IPPORT_SYSTAT 11 #define IPPORT_DAYTIME 13 #define IPPORT_NETSTAT 15 #define IPPORT_FTP 21 #define IPPORT_TELNET 23 #define IPPORT_SMTP 25 #define IPPORT_TIMESERVER 37 #define IPPORT_NAMESERVER 42 #define IPPORT_WHOIS 43 #define IPPORT_MTP 57 #define IPPORT_TFTP 69 #define IPPORT_RJE 77 #define IPPORT_FINGER 79 #define IPPORT_TTYLINK 87 #define IPPORT_SUPDUP 95 #define IPPORT_EXECSERVER 512 #define IPPORT_LOGINSERVER 513 #define IPPORT_CMDSERVER 514 #define IPPORT_EFSSERVER 520 #define IPPORT_BIFFUDP 512 #define IPPORT_WHOSERVER 513 #define IPPORT_ROUTESERVER 520 #define IPPORT_RESERVED 1024 /* Link numbers */ #define IMPLINK_IP 155 #define IMPLINK_LOWEXPER 156 #define IMPLINK_HIGHEXPER 158 /* Constants to manipulate Internet addresses */ #define IN_CLASSA_NET 0xFF000000L #define IN_CLASSA_NSHIFT 24 #define IN_CLASSA_HOST 0x00FFFFFFL #define IN_CLASSA_MAX 128 #define IN_CLASSB_NET 0xFFFF0000L #define IN_CLASSB_NSHIFT 16 #define IN_CLASSB_HOST 0x0000FFFFL #define IN_CLASSB_MAX 65536 #define IN_CLASSC_NET 0xFFFFFF00L #define IN_CLASSC_NSHIFT 8 #define IN_CLASSC_HOST 0x000000FFL #define INADDR_ANY 0x00000000L #define INADDR_LOOPBACK 0x7F000001L #define INADDR_BROADCAST 0xFFFFFFFFL #define INADDR_NONE 0xFFFFFFFFL /* Macros to manipulate Internet addresses */ #define IN_CLASSA( x ) (((long)(x) & 0x80000000L) == 0) #define IN_CLASSB( x ) (((long)(x) & 0xC0000000L) == 0x80000000L) #define IN_CLASSC( x ) (((long)(x) & 0xE0000000L) == 0xC0000000L) /* String lengths */ #define WSADESCRIPTION_LEN 256 #define WSASYS_STATUS_LEN 128 /* IP options for getsockopt() and setsockopt() */ #define IP_OPTIONS 1 #define IP_MULTICAST_IF 2 #define IP_MULTICAST_TTL 3 #define IP_MULTICAST_LOOP 4 #define IP_ADD_MEMBERSHIP 5 #define IP_DROP_MEMBERSHIP 6 #define IP_TTL 7 #define IP_TOS 8 #define IP_DONTFRAGMENT 9 /* Miscellaneous IP constants */ #define IP_DEFAULT_MULTICAST_TTL 1 #define IP_DEFAULT_MULTICAST_LOOP 1 #define IP_MAX_MEMBERSHIPS 20 /* Socket special values */ #define INVALID_SOCKET 0xFFFFFFFF #define SOCKET_ERROR (-1) /* Socket types */ #define SOCK_STREAM 1 #define SOCK_DGRAM 2 #define SOCK_RAW 3 #define SOCK_RDM 4 #define SOCK_SEQPACKET 5 /* Socket option flags */ #define SO_DEBUG 0x0001 #define SO_ACCEPTCONN 0x0002 #define SO_REUSEADDR 0x0004 #define SO_KEEPALIVE 0x0008 #define SO_DONTROUTE 0x0010 #define SO_BROADCAST 0x0020 #define SO_USELOOPBACK 0x0040 #define SO_LINGER 0x0080 #define SO_OOBINLINE 0x0100 #define SO_DONTLINGER (u_int)(~SO_LINGER) /* Other socket options */ #define SO_SNDBUF 0x1001 #define SO_RCVBUF 0x1002 #define SO_SNDLOWAT 0x1003 #define SO_RCVLOWAT 0x1004 #define SO_SNDTIMEO 0x1005 #define SO_RCVTIMEO 0x1006 #define SO_ERROR 0x1007 #define SO_TYPE 0x1008 #define SO_CONNDATA 0x7000 #define SO_CONNOPT 0x7001 #define SO_DISCDATA 0x7002 #define SO_DISCOPT 0x7003 #define SO_CONNDATALEN 0x7004 #define SO_CONNOPTLEN 0x7005 #define SO_DISCDATALEN 0x7006 #define SO_DISCOPTLEN 0x7007 #define SO_OPENTYPE 0x7008 #define SO_MAXDG 0x7009 #define SO_MAXPATHDG 0x700A #define SO_UPDATE_ACCEPT_CONTEXT 0x700B #define SO_CONNECT_TIME 0x700C /* Socket option synchronous alert flags */ #define SO_SYNCHRONOUS_ALERT 0x0010 #define SO_SYNCHRONOUS_NONALERT 0x0020 /* TCP options */ #define TCP_NODELAY 0x0001 #define TCP_BSDURGENT 0x7000 /* Address families */ #define AF_UNSPEC 0 #define AF_UNIX 1 #define AF_INET 2 #define AF_IMPLINK 3 #define AF_PUP 4 #define AF_CHAOS 5 #define AF_IPX 6 #define AF_NS 6 #define AF_ISO 7 #define AF_OSI AF_ISO #define AF_ECMA 8 #define AF_DATAKIT 9 #define AF_CCITT 10 #define AF_SNA 11 #define AF_DECnet 12 #define AF_DLI 13 #define AF_LAT 14 #define AF_HYLINK 15 #define AF_APPLETALK 16 #define AF_NETBIOS 17 #define AF_VOICEVIEW 18 #define AF_FIREFOX 19 #define AF_UNKNOWN1 20 #define AF_BAN 21 #define AF_MAX 22 /* Protocol families */ #define PF_UNSPEC AF_UNSPEC #define PF_UNIX AF_UNIX #define PF_INET AF_INET #define PF_IMPLINK AF_IMPLINK #define PF_PUP AF_PUP #define PF_CHAOS AF_CHAOS #define PF_NS AF_NS #define PF_IPX AF_IPX #define PF_ISO AF_ISO #define PF_OSI AF_OSI #define PF_ECMA AF_ECMA #define PF_DATAKIT AF_DATAKIT #define PF_CCITT AF_CCITT #define PF_SNA AF_SNA #define PF_DECnet AF_DECnet #define PF_DLI AF_DLI #define PF_LAT AF_LAT #define PF_HYLINK AF_HYLINK #define PF_APPLETALK AF_APPLETALK #define PF_VOICEVIEW AF_VOICEVIEW #define PF_FIREFOX AF_FIREFOX #define PF_UNKNOWN1 AF_UNKNOWN1 #define PF_BAN AF_BAN #define PF_MAX AF_MAX /* Special level number for getsockopt() and setsockopt() */ #define SOL_SOCKET 0xFFFF /* Maximum queue length for listen() */ #define SOMAXCONN 5 /* Socket message flags */ #define MSG_OOB 0x00000001L #define MSG_PEEK 0x00000002L #define MSG_DONTROUTE 0x00000004L #define MSG_PARTIAL 0x00008000L /* Maximum size of a gethostby*() structure */ #define MAXGETHOSTSTRUCT 1024 /* WSAAsyncSelect() flags */ #define FD_READ 0x01 #define FD_WRITE 0x02 #define FD_OOB 0x04 #define FD_ACCEPT 0x08 #define FD_CONNECT 0x10 #define FD_CLOSE 0x20 /* Old names of socket error codes (defined in winerror.h) */ #define HOST_NOT_FOUND WSAHOST_NOT_FOUND #define TRY_AGAIN WSATRY_AGAIN #define NO_RECOVERY WSANO_RECOVERY #define NO_DATA WSANO_DATA #define WSANO_ADDRESS WSANO_DATA #define NO_ADDRESS WSANO_ADDRESS /* TransmitFile() flags */ #define TF_DISCONNECT 0x00000001L #define TF_REUSE_SOCKET 0x00000002L #define TF_WRITE_BEHIND 0x00000004L /* Set of sockets */ typedef struct fd_set { u_int fd_count; SOCKET fd_array[FD_SETSIZE]; } fd_set; /* Time value */ struct timeval { long tv_sec; long tv_usec; }; /* Host entity */ struct hostent { char *h_name; char **h_aliases; short h_addrtype; short h_length; char **h_addr_list; }; #define h_addr h_addr_list[0] /* Network entity */ struct netent { char *n_name; char **n_aliases; short n_addrtype; u_long n_net; }; /* Server entity */ struct servent { char *s_name; char **s_aliases; short s_port; char *s_proto; }; /* Protocol entity */ struct protoent { char *p_name; char **p_aliases; short p_proto; }; /* Internet socket address */ struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; /* WSA data */ typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN + 1]; char szSystemStatus[WSASYS_STATUS_LEN + 1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char *lpVendorInfo; } WSADATA; typedef WSADATA *LPWSADATA; /* IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP parameters */ struct ip_mreq { struct in_addr imr_multiaddr; struct in_addr imr_interface; }; /* Socket address */ struct sockaddr { u_short sa_family; char sa_data[14]; }; /* Socket protocol */ struct sockproto { u_short sp_family; u_short sp_protocol; }; /* SO_LINGER information */ struct linger { u_short l_onoff; u_short l_linger; }; /* TransmitFile() buffers */ typedef struct _TRANSMIT_FILE_BUFFERS { PVOID Head; DWORD HeadLength; PVOID Tail; DWORD TailLength; } TRANSMIT_FILE_BUFFERS; typedef TRANSMIT_FILE_BUFFERS *PTRANSMIT_FILE_BUFFERS; typedef TRANSMIT_FILE_BUFFERS *LPTRANSMIT_FILE_BUFFERS; /* Win32-style names for structures */ typedef struct sockaddr SOCKADDR; typedef struct sockaddr *PSOCKADDR; typedef struct sockaddr *LPSOCKADDR; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr_in *PSOCKADDR_IN; typedef struct sockaddr_in *LPSOCKADDR_IN; typedef struct linger LINGER; typedef struct linger *PLINGER; typedef struct linger *LPLINGER; typedef struct fd_set FD_SET; typedef struct fd_set *PFD_SET; typedef struct fd_set *LPFD_SET; typedef struct hostent HOSTENT; typedef struct hostent *PHOSTENT; typedef struct hostent *LPHOSTENT; typedef struct servent SERVENT; typedef struct servent *PSERVENT; typedef struct servent *LPSERVENT; typedef struct protoent PROTOENT; typedef struct protoent *PPROTOENT; typedef struct protoent *LPPROTOENT; typedef struct timeval TIMEVAL; typedef struct timeval *PTIMEVAL; typedef struct timeval *LPTIMEVAL; /* Functions in WSOCK32.DLL */ BOOL PASCAL AcceptEx( SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED ); VOID PASCAL GetAcceptExSockaddrs( PVOID, DWORD, DWORD, DWORD, struct sockaddr **, LPINT, struct sockaddr **, LPINT ); BOOL PASCAL TransmitFile( SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD ); HANDLE PASCAL WSAAsyncGetHostByAddr( HWND, u_int, const char *, int, int, char *, int ); HANDLE PASCAL WSAAsyncGetHostByName( HWND, u_int, const char *, char *, int ); HANDLE PASCAL WSAAsyncGetProtoByName( HWND, u_int, const char *, char *, int ); HANDLE PASCAL WSAAsyncGetProtoByNumber( HWND, u_int, int, char *, int ); HANDLE PASCAL WSAAsyncGetServByName( HWND, u_int, const char *, const char *, char *, int ); HANDLE PASCAL WSAAsyncGetServByPort( HWND, u_int, int, const char *, char *, int ); int PASCAL WSAAsyncSelect( SOCKET, HWND, u_int, long ); int PASCAL WSACancelAsyncRequest( HANDLE ); int PASCAL WSACancelBlockingCall( void ); int PASCAL WSACleanup( void ); int PASCAL WSAGetLastError( void ); BOOL PASCAL WSAIsBlocking( void ); int PASCAL WSARecvEx( SOCKET, char *, int, int * ); FARPROC PASCAL WSASetBlockingHook( FARPROC ); void PASCAL WSASetLastError( int ); int PASCAL WSAStartup( WORD, LPWSADATA ); int PASCAL WSAUnhookBlockingHook( void ); int PASCAL __WSAFDIsSet( SOCKET, fd_set * ); SOCKET PASCAL accept( SOCKET, struct sockaddr *, int * ); int PASCAL bind( SOCKET, const struct sockaddr *, int ); int PASCAL closesocket( SOCKET ); int PASCAL connect( SOCKET, const struct sockaddr *, int ); struct hostent * PASCAL gethostbyaddr( const char *, int, int ); struct hostent * PASCAL gethostbyname( const char * ); int PASCAL gethostname( char *, int ); int PASCAL getpeername( SOCKET, struct sockaddr *, int * ); struct protoent * PASCAL getprotobyname( const char * ); struct protoent * PASCAL getprotobynumber( int ); struct servent * PASCAL getservbyname( const char *, const char * ); struct servent * PASCAL getservbyport( int, const char * ); int PASCAL getsockname( SOCKET, struct sockaddr *, int * ); int PASCAL getsockopt( SOCKET, int, int, char *, int * ); u_long PASCAL htonl( u_long ); u_short PASCAL htons( u_short ); unsigned long PASCAL inet_addr( const char * ); char * PASCAL inet_ntoa( struct in_addr ); int PASCAL ioctlsocket( SOCKET, long, u_long * ); int PASCAL listen( SOCKET, int ); u_long PASCAL ntohl( u_long ); u_short PASCAL ntohs( u_short ); int PASCAL recv( SOCKET, char *, int, int ); int PASCAL recvfrom( SOCKET, char *, int, int, struct sockaddr *, int * ); int PASCAL select( int, fd_set *, fd_set *, fd_set *, const struct timeval * ); int PASCAL send( SOCKET, const char *, int, int ); int PASCAL sendto( SOCKET, const char *, int, int, const struct sockaddr *, int ); int PASCAL setsockopt( SOCKET, int, int, const char *, int ); int PASCAL shutdown( SOCKET, int ); SOCKET PASCAL socket( int, int, int ); /* Macros to manipulate the fd_set structure */ #define FD_CLR( p1, p2 ) \ { \ u_int __counter; \ __counter = 0; \ while( __counter < ((fd_set *)(p2))->fd_count && \ ((fd_set *)(p2))->fd_array[__counter] != p1 ) { \ __counter++; \ } \ if( ((fd_set *)(p2))->fd_array[__counter] == p1 ) { \ for( ; __counter < ((fd_set *)(p2))->fd_count - 1; __counter++ ) { \ ((fd_set *)(p2))->fd_array[__counter] = \ ((fd_set *)(p2))->fd_array[__counter - 1]; \ } \ ((fd_set *)(p2))->fd_count--; \ } \ } #define FD_SET( p1, p2 ) \ if( ((fd_set *)(p2))->fd_count < FD_SETSIZE ) { \ ((fd_set *)(p2))->fd_array[((fd_set *)(p2))->fd_count++] = p1; \ } #define FD_ZERO( x ) (((fd_set *)(x))->fd_count = 0) #define FD_ISSET( p1, p2 ) __WSAFDIsSet( (SOCKET)(p1), (fd_set *)(p2) ) /* Macros to manipulate time values */ #define timerisset( x ) ((x)->tv_sec || (x)->tv_usec) #define timercmp( p1, p2, p3 ) \ ((p1)->tv_sec p3 (p2)->tv_sec || ((p1)->tv_sec == (p2)->tv_sec && \ (p1)->tv_usec p3 (p2)->tv_usec)) #define timerclear( x ) ((x)->tv_sec = (x)->tv_usec = 0) /* Macros to manipulate the parameters to asynchronous completion messages */ #define WSAMAKEASYNCREPLY( p1, p2 ) MAKELONG( p1, p2 ) #define WSAMAKESELECTREPLY( p1, p2 ) MAKELONG( p1, p2 ) #define WSAGETASYNCBUFLEN( x ) LOWORD( x ) #define WSAGETASYNCERROR( x ) HIWORD( x ) #define WSAGETSELECTEVENT( x ) LOWORD( x ) #define WSAGETSELECTERROR( x ) HIWORD( x ) /* Macro for compatiblity */ #define h_errno WSAGetLastError() #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _WINSOCKAPI_ */