/* WINSOCK.H--definitions to be used with the WINSOCK.DLL | |
* Copyright (c) 1993-1995, Microsoft Corp. All rights reserved. | |
* | |
* This header file corresponds to version 1.1 of the Windows Sockets specification. | |
* | |
* This file includes parts which are Copyright (c) 1982-1986 Regents | |
* of the University of California. All rights reserved. The | |
* Berkeley Software License Agreement specifies the terms and | |
* conditions for redistribution. | |
* | |
*/ | |
#ifndef _WINSOCKAPI_ | |
#define _WINSOCKAPI_ | |
#define FAR | |
#define PASCAL | |
/* | |
* Basic system type definitions, taken from the BSD file sys/types.h. | |
*/ | |
typedef unsigned char u_char; | |
typedef unsigned short u_short; | |
typedef unsigned int u_int; | |
typedef unsigned long u_long; | |
/* | |
* The new type to be used in all | |
* instances which refer to sockets. | |
*/ | |
typedef u_int SOCKET; | |
// FIXME | |
#if 0 | |
/* | |
* Select uses arrays of SOCKETs. These macros manipulate such | |
* arrays. FD_SETSIZE may be defined by the user before including | |
* this file, but the default here should be >= 64. | |
* | |
* CAVEAT IMPLEMENTOR and USER: THESE MACROS AND TYPES MUST BE | |
* INCLUDED IN WINSOCK.H EXACTLY AS SHOWN HERE. | |
*/ | |
#ifndef FD_SETSIZE | |
#define FD_SETSIZE 64 | |
#endif /* FD_SETSIZE */ | |
typedef struct fd_set { | |
u_int fd_count; /* how many are SET? */ | |
SOCKET fd_array[FD_SETSIZE]; /* an array of SOCKETs */ | |
} fd_set; | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
extern int PASCAL FAR __WSAFDIsSet(SOCKET, fd_set FAR *); | |
#ifdef __cplusplus | |
} | |
#endif | |
#define FD_CLR(fd, set) do { \ | |
u_int __i; \ | |
for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { \ | |
if (((fd_set FAR *)(set))->fd_array[__i] == fd) { \ | |
while (__i < ((fd_set FAR *)(set))->fd_count-1) { \ | |
((fd_set FAR *)(set))->fd_array[__i] = \ | |
((fd_set FAR *)(set))->fd_array[__i+1]; \ | |
__i++; \ | |
} \ | |
((fd_set FAR *)(set))->fd_count--; \ | |
break; \ | |
} \ | |
} \ | |
} while(0) | |
#define FD_SET(fd, set) do { \ | |
if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) \ | |
((fd_set FAR *)(set))->fd_array[((fd_set FAR *)(set))->fd_count++]=(fd);\ | |
} while(0) | |
#define FD_ZERO(set) (((fd_set FAR *)(set))->fd_count=0) | |
#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set FAR *)(set)) | |
/* | |
* Structure used in select() call, taken from the BSD file sys/time.h. | |
*/ | |
struct timeval { | |
long tv_sec; /* seconds */ | |
long tv_usec; /* and microseconds */ | |
}; | |
/* | |
* Operations on timevals. | |
* | |
* NB: timercmp does not work for >= or <=. | |
*/ | |
#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) | |
#define timercmp(tvp, uvp, cmp) \ | |
((tvp)->tv_sec cmp (uvp)->tv_sec || \ | |
(tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec) | |
#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 | |
#endif | |
/* | |
* Commands for ioctlsocket(), taken from the BSD file fcntl.h. | |
* | |
* | |
* Ioctl's have the command encoded in the lower word, | |
* and the size of any in or out parameters in the upper | |
* word. The high 2 bits of the upper word are used | |
* to encode the in/out status of the parameter; for now | |
* we restrict parameters to at most 128 bytes. | |
*/ | |
#define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */ | |
#define IOC_VOID 0x20000000 /* no parameters */ | |
#define IOC_OUT 0x40000000 /* copy out parameters */ | |
#define IOC_IN 0x80000000 /* copy in parameters */ | |
#define IOC_INOUT (IOC_IN|IOC_OUT) | |
/* 0x20000000 distinguishes new & | |
old ioctl's */ | |
#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) | |
#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) | |
#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) | |
#define FIONREAD _IOR('f', 127, u_long) /* get # bytes to read */ | |
#define FIONBIO _IOW('f', 126, u_long) /* set/clear non-blocking i/o */ | |
#define FIOASYNC _IOW('f', 125, u_long) /* set/clear async i/o */ | |
/* Socket I/O Controls */ | |
#define SIOCSHIWAT _IOW('s', 0, u_long) /* set high watermark */ | |
#define SIOCGHIWAT _IOR('s', 1, u_long) /* get high watermark */ | |
#define SIOCSLOWAT _IOW('s', 2, u_long) /* set low watermark */ | |
#define SIOCGLOWAT _IOR('s', 3, u_long) /* get low watermark */ | |
#define SIOCATMARK _IOR('s', 7, u_long) /* at oob mark? */ | |
/* | |
* Structures returned by network data base library, taken from the | |
* BSD file netdb.h. All addresses are supplied in host order, and | |
* returned in network order (suitable for use in system calls). | |
*/ | |
struct hostent { | |
char FAR * h_name; /* official name of host */ | |
char FAR * FAR * h_aliases; /* alias list */ | |
short h_addrtype; /* host address type */ | |
short h_length; /* length of address */ | |
char FAR * FAR * h_addr_list; /* list of addresses */ | |
#define h_addr h_addr_list[0] /* address, for backward compat */ | |
}; | |
/* | |
* It is assumed here that a network number | |
* fits in 32 bits. | |
*/ | |
struct netent { | |
char FAR * n_name; /* official name of net */ | |
char FAR * FAR * n_aliases; /* alias list */ | |
short n_addrtype; /* net address type */ | |
u_long n_net; /* network # */ | |
}; | |
struct servent { | |
char FAR * s_name; /* official service name */ | |
char FAR * FAR * s_aliases; /* alias list */ | |
short s_port; /* port # */ | |
char FAR * s_proto; /* protocol to use */ | |
}; | |
struct protoent { | |
char FAR * p_name; /* official protocol name */ | |
char FAR * FAR * p_aliases; /* alias list */ | |
short p_proto; /* protocol # */ | |
}; | |
/* | |
* Constants and structures defined by the internet system, | |
* Per RFC 790, September 1981, taken from the BSD file netinet/in.h. | |
*/ | |
/* | |
* Protocols | |
*/ | |
#define IPPROTO_IP 0 /* dummy for IP */ | |
#define IPPROTO_ICMP 1 /* control message protocol */ | |
#define IPPROTO_GGP 2 /* gateway^2 (deprecated) */ | |
#define IPPROTO_TCP 6 /* tcp */ | |
#define IPPROTO_PUP 12 /* pup */ | |
#define IPPROTO_UDP 17 /* user datagram protocol */ | |
#define IPPROTO_IDP 22 /* xns idp */ | |
#define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */ | |
#define IPPROTO_RAW 255 /* raw IP packet */ | |
#define IPPROTO_MAX 256 | |
/* | |
* Port/socket numbers: network standard functions | |
*/ | |
#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 | |
/* | |
* Port/socket numbers: host specific functions | |
*/ | |
#define IPPORT_TFTP 69 | |
#define IPPORT_RJE 77 | |
#define IPPORT_FINGER 79 | |
#define IPPORT_TTYLINK 87 | |
#define IPPORT_SUPDUP 95 | |
/* | |
* UNIX TCP sockets | |
*/ | |
#define IPPORT_EXECSERVER 512 | |
#define IPPORT_LOGINSERVER 513 | |
#define IPPORT_CMDSERVER 514 | |
#define IPPORT_EFSSERVER 520 | |
/* | |
* UNIX UDP sockets | |
*/ | |
#define IPPORT_BIFFUDP 512 | |
#define IPPORT_WHOSERVER 513 | |
#define IPPORT_ROUTESERVER 520 | |
/* 520+1 also used */ | |
/* | |
* Ports < IPPORT_RESERVED are reserved for | |
* privileged processes (e.g. root). | |
*/ | |
#define IPPORT_RESERVED 1024 | |
/* | |
* Link numbers | |
*/ | |
#define IMPLINK_IP 155 | |
#define IMPLINK_LOWEXPER 156 | |
#define IMPLINK_HIGHEXPER 158 | |
/* | |
* Internet address (old style... should be updated) | |
*/ | |
struct in_addr { | |
union { | |
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; | |
struct { u_short s_w1,s_w2; } S_un_w; | |
u_long S_addr; | |
} S_un; | |
#define s_addr S_un.S_addr | |
/* can be used for most tcp & ip code */ | |
#define s_host S_un.S_un_b.s_b2 | |
/* host on imp */ | |
#define s_net S_un.S_un_b.s_b1 | |
/* network */ | |
#define s_imp S_un.S_un_w.s_w2 | |
/* imp */ | |
#define s_impno S_un.S_un_b.s_b4 | |
/* imp # */ | |
#define s_lh S_un.S_un_b.s_b3 | |
/* logical host */ | |
}; | |
/* | |
* Definitions of bits in internet address integers. | |
* On subnets, the decomposition of addresses to host and net parts | |
* is done according to subnet mask, not the masks here. | |
*/ | |
#define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0) | |
#define IN_CLASSA_NET 0xff000000 | |
#define IN_CLASSA_NSHIFT 24 | |
#define IN_CLASSA_HOST 0x00ffffff | |
#define IN_CLASSA_MAX 128 | |
#define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000) | |
#define IN_CLASSB_NET 0xffff0000 | |
#define IN_CLASSB_NSHIFT 16 | |
#define IN_CLASSB_HOST 0x0000ffff | |
#define IN_CLASSB_MAX 65536 | |
#define IN_CLASSC(i) (((long)(i) & 0xe0000000) == 0xc0000000) | |
#define IN_CLASSC_NET 0xffffff00 | |
#define IN_CLASSC_NSHIFT 8 | |
#define IN_CLASSC_HOST 0x000000ff | |
#define INADDR_ANY (u_long)0x00000000 | |
#define INADDR_LOOPBACK 0x7f000001 | |
#define INADDR_BROADCAST (u_long)0xffffffff | |
#define INADDR_NONE 0xffffffff | |
/* | |
* Socket address, internet style. | |
*/ | |
struct sockaddr_in { | |
short sin_family; | |
u_short sin_port; | |
struct in_addr sin_addr; | |
char sin_zero[8]; | |
}; | |
#define WSADESCRIPTION_LEN 256 | |
#define WSASYS_STATUS_LEN 128 | |
/* | |
* Options for use with [gs]etsockopt at the IP level. | |
*/ | |
#define IP_OPTIONS 1 /* set/get IP per-packet options */ | |
#define IP_MULTICAST_IF 2 /* set/get IP multicast interface */ | |
#define IP_MULTICAST_TTL 3 /* set/get IP multicast timetolive */ | |
#define IP_MULTICAST_LOOP 4 /* set/get IP multicast loopback */ | |
#define IP_ADD_MEMBERSHIP 5 /* add an IP group membership */ | |
#define IP_DROP_MEMBERSHIP 6 /* drop an IP group membership */ | |
#define IP_DEFAULT_MULTICAST_TTL 1 /* normally limit m'casts to 1 hop */ | |
#define IP_DEFAULT_MULTICAST_LOOP 1 /* normally hear sends if a member */ | |
#define IP_MAX_MEMBERSHIPS 20 /* per socket; must fit in one mbuf */ | |
/* | |
* Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP. | |
*/ | |
struct ip_mreq { | |
struct in_addr imr_multiaddr; /* IP multicast address of group */ | |
struct in_addr imr_interface; /* local IP address of interface */ | |
}; | |
/* | |
* Definitions related to sockets: types, address families, options, | |
* taken from the BSD file sys/socket.h. | |
*/ | |
/* | |
* This is used instead of -1, since the | |
* SOCKET type is unsigned. | |
*/ | |
#define INVALID_SOCKET (SOCKET)(~0) | |
#define SOCKET_ERROR (-1) | |
/* | |
* Types | |
*/ | |
#define SOCK_STREAM 1 /* stream socket */ | |
#define SOCK_DGRAM 2 /* datagram socket */ | |
#define SOCK_RAW 3 /* raw-protocol interface */ | |
#define SOCK_RDM 4 /* reliably-delivered message */ | |
#define SOCK_SEQPACKET 5 /* sequenced packet stream */ | |
/* | |
* Option flags per-socket. | |
*/ | |
#define SO_DEBUG 0x0001 /* turn on debugging info recording */ | |
#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ | |
#define SO_REUSEADDR 0x0004 /* allow local address reuse */ | |
#define SO_KEEPALIVE 0x0008 /* keep connections alive */ | |
#define SO_DONTROUTE 0x0010 /* just use interface addresses */ | |
#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ | |
#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ | |
#define SO_LINGER 0x0080 /* linger on close if data present */ | |
#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ | |
#define SO_DONTLINGER (u_int)(~SO_LINGER) | |
/* | |
* Additional options. | |
*/ | |
#define SO_SNDBUF 0x1001 /* send buffer size */ | |
#define SO_RCVBUF 0x1002 /* receive buffer size */ | |
#define SO_SNDLOWAT 0x1003 /* send low-water mark */ | |
#define SO_RCVLOWAT 0x1004 /* receive low-water mark */ | |
#define SO_SNDTIMEO 0x1005 /* send timeout */ | |
#define SO_RCVTIMEO 0x1006 /* receive timeout */ | |
#define SO_ERROR 0x1007 /* get error status and clear */ | |
#define SO_TYPE 0x1008 /* get socket type */ | |
/* | |
* Options for connect and disconnect data and options. Used only by | |
* non-TCP/IP transports such as DECNet, OSI TP4, etc. | |
*/ | |
#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 | |
/* | |
* Option for opening sockets for synchronous access. | |
*/ | |
#define SO_OPENTYPE 0x7008 | |
#define SO_SYNCHRONOUS_ALERT 0x10 | |
#define SO_SYNCHRONOUS_NONALERT 0x20 | |
/* | |
* Other NT-specific options. | |
*/ | |
#define SO_MAXDG 0x7009 | |
#define SO_MAXPATHDG 0x700A | |
/* | |
* TCP options. | |
*/ | |
#define TCP_NODELAY 0x0001 | |
#define TCP_BSDURGENT 0x7000 | |
/* | |
* Address families. | |
*/ | |
#define AF_UNSPEC 0 /* unspecified */ | |
#define AF_UNIX 1 /* local to host (pipes, portals) */ | |
#define AF_INET 2 /* internetwork: UDP, TCP, etc. */ | |
#define AF_IMPLINK 3 /* arpanet imp addresses */ | |
#define AF_PUP 4 /* pup protocols: e.g. BSP */ | |
#define AF_CHAOS 5 /* mit CHAOS protocols */ | |
#define AF_IPX 6 /* IPX and SPX */ | |
#define AF_NS 6 /* XEROX NS protocols */ | |
#define AF_ISO 7 /* ISO protocols */ | |
#define AF_OSI AF_ISO /* OSI is ISO */ | |
#define AF_ECMA 8 /* european computer manufacturers */ | |
#define AF_DATAKIT 9 /* datakit protocols */ | |
#define AF_CCITT 10 /* CCITT protocols, X.25 etc */ | |
#define AF_SNA 11 /* IBM SNA */ | |
#define AF_DECnet 12 /* DECnet */ | |
#define AF_DLI 13 /* Direct data link interface */ | |
#define AF_LAT 14 /* LAT */ | |
#define AF_HYLINK 15 /* NSC Hyperchannel */ | |
#define AF_APPLETALK 16 /* AppleTalk */ | |
#define AF_NETBIOS 17 /* NetBios-style addresses */ | |
#define AF_VOICEVIEW 18 /* VoiceView */ | |
#define AF_MAX 19 | |
/* | |
* Structure used by kernel to store most | |
* addresses. | |
*/ | |
struct sockaddr { | |
u_short sa_family; /* address family */ | |
char sa_data[14]; /* up to 14 bytes of direct address */ | |
}; | |
/* | |
* Structure used by kernel to pass protocol | |
* information in raw sockets. | |
*/ | |
struct sockproto { | |
u_short sp_family; /* address family */ | |
u_short sp_protocol; /* protocol */ | |
}; | |
/* | |
* Protocol families, same as address families for now. | |
*/ | |
#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_MAX AF_MAX | |
/* | |
* Structure used for manipulating linger option. | |
*/ | |
struct linger { | |
u_short l_onoff; /* option on/off */ | |
u_short l_linger; /* linger time */ | |
}; | |
/* | |
* Level number for (get/set)sockopt() to apply to socket itself. | |
*/ | |
#define SOL_SOCKET 0xffff /* options for socket level */ | |
/* | |
* Maximum queue length specifiable by listen. | |
*/ | |
#define SOMAXCONN 5 | |
#define MSG_OOB 0x1 /* process out-of-band data */ | |
#define MSG_PEEK 0x2 /* peek at incoming message */ | |
#define MSG_DONTROUTE 0x4 /* send without using routing tables */ | |
#define MSG_MAXIOVLEN 16 | |
#define MSG_PARTIAL 0x8000 /* partial send or recv for message xport */ | |
/* | |
* Define constant based on rfc883, used by gethostbyxxxx() calls. | |
*/ | |
#define MAXGETHOSTSTRUCT 1024 | |
/* | |
* Define flags to be used with the WSAAsyncSelect() call. | |
*/ | |
#define FD_READ 0x01 | |
#define FD_WRITE 0x02 | |
#define FD_OOB 0x04 | |
#define FD_ACCEPT 0x08 | |
#define FD_CONNECT 0x10 | |
#define FD_CLOSE 0x20 | |
/* | |
* All Windows Sockets error constants are biased by WSABASEERR from | |
* the "normal" | |
*/ | |
#define WSABASEERR 10000 | |
/* | |
* Windows Sockets definitions of regular Microsoft C error constants | |
*/ | |
#define WSAEINTR (WSABASEERR+4) | |
#define WSAEBADF (WSABASEERR+9) | |
#define WSAEACCES (WSABASEERR+13) | |
#define WSAEFAULT (WSABASEERR+14) | |
#define WSAEINVAL (WSABASEERR+22) | |
#define WSAEMFILE (WSABASEERR+24) | |
/* | |
* Windows Sockets definitions of regular Berkeley error constants | |
*/ | |
#define WSAEWOULDBLOCK (WSABASEERR+35) | |
#define WSAEINPROGRESS (WSABASEERR+36) | |
#define WSAEALREADY (WSABASEERR+37) | |
#define WSAENOTSOCK (WSABASEERR+38) | |
#define WSAEDESTADDRREQ (WSABASEERR+39) | |
#define WSAEMSGSIZE (WSABASEERR+40) | |
#define WSAEPROTOTYPE (WSABASEERR+41) | |
#define WSAENOPROTOOPT (WSABASEERR+42) | |
#define WSAEPROTONOSUPPORT (WSABASEERR+43) | |
#define WSAESOCKTNOSUPPORT (WSABASEERR+44) | |
#define WSAEOPNOTSUPP (WSABASEERR+45) | |
#define WSAEPFNOSUPPORT (WSABASEERR+46) | |
#define WSAEAFNOSUPPORT (WSABASEERR+47) | |
#define WSAEADDRINUSE (WSABASEERR+48) | |
#define WSAEADDRNOTAVAIL (WSABASEERR+49) | |
#define WSAENETDOWN (WSABASEERR+50) | |
#define WSAENETUNREACH (WSABASEERR+51) | |
#define WSAENETRESET (WSABASEERR+52) | |
#define WSAECONNABORTED (WSABASEERR+53) | |
#define WSAECONNRESET (WSABASEERR+54) | |
#define WSAENOBUFS (WSABASEERR+55) | |
#define WSAEISCONN (WSABASEERR+56) | |
#define WSAENOTCONN (WSABASEERR+57) | |
#define WSAESHUTDOWN (WSABASEERR+58) | |
#define WSAETOOMANYREFS (WSABASEERR+59) | |
#define WSAETIMEDOUT (WSABASEERR+60) | |
#define WSAECONNREFUSED (WSABASEERR+61) | |
#define WSAELOOP (WSABASEERR+62) | |
#define WSAENAMETOOLONG (WSABASEERR+63) | |
#define WSAEHOSTDOWN (WSABASEERR+64) | |
#define WSAEHOSTUNREACH (WSABASEERR+65) | |
#define WSAENOTEMPTY (WSABASEERR+66) | |
#define WSAEPROCLIM (WSABASEERR+67) | |
#define WSAEUSERS (WSABASEERR+68) | |
#define WSAEDQUOT (WSABASEERR+69) | |
#define WSAESTALE (WSABASEERR+70) | |
#define WSAEREMOTE (WSABASEERR+71) | |
#define WSAEDISCON (WSABASEERR+101) | |
/* | |
* Extended Windows Sockets error constant definitions | |
*/ | |
#define WSASYSNOTREADY (WSABASEERR+91) | |
#define WSAVERNOTSUPPORTED (WSABASEERR+92) | |
#define WSANOTINITIALISED (WSABASEERR+93) | |
/* | |
* Error return codes from gethostbyname() and gethostbyaddr() | |
* (when using the resolver). Note that these errors are | |
* retrieved via WSAGetLastError() and must therefore follow | |
* the rules for avoiding clashes with error numbers from | |
* specific implementations or language run-time systems. | |
* For this reason the codes are based at WSABASEERR+1001. | |
* Note also that [WSA]NO_ADDRESS is defined only for | |
* compatibility purposes. | |
*/ | |
#define h_errno WSAGetLastError() | |
/* Authoritative Answer: Host not found */ | |
#define WSAHOST_NOT_FOUND (WSABASEERR+1001) | |
#define HOST_NOT_FOUND WSAHOST_NOT_FOUND | |
/* Non-Authoritative: Host not found, or SERVERFAIL */ | |
#define WSATRY_AGAIN (WSABASEERR+1002) | |
#define TRY_AGAIN WSATRY_AGAIN | |
/* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ | |
#define WSANO_RECOVERY (WSABASEERR+1003) | |
#define NO_RECOVERY WSANO_RECOVERY | |
/* Valid name, no data record of requested type */ | |
#define WSANO_DATA (WSABASEERR+1004) | |
#define NO_DATA WSANO_DATA | |
/* no address, look for MX record */ | |
#define WSANO_ADDRESS WSANO_DATA | |
#define NO_ADDRESS WSANO_ADDRESS | |
/* | |
* Windows Sockets errors redefined as regular Berkeley error constants. | |
* These are commented out in Windows NT to avoid conflicts with errno.h. | |
* Use the WSA constants instead. | |
*/ | |
#if 0 | |
#define EWOULDBLOCK WSAEWOULDBLOCK | |
#define EINPROGRESS WSAEINPROGRESS | |
#define EALREADY WSAEALREADY | |
#define ENOTSOCK WSAENOTSOCK | |
#define EDESTADDRREQ WSAEDESTADDRREQ | |
#define EMSGSIZE WSAEMSGSIZE | |
#define EPROTOTYPE WSAEPROTOTYPE | |
#define ENOPROTOOPT WSAENOPROTOOPT | |
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT | |
#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT | |
#define EOPNOTSUPP WSAEOPNOTSUPP | |
#define EPFNOSUPPORT WSAEPFNOSUPPORT | |
#define EAFNOSUPPORT WSAEAFNOSUPPORT | |
#define EADDRINUSE WSAEADDRINUSE | |
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL | |
#define ENETDOWN WSAENETDOWN | |
#define ENETUNREACH WSAENETUNREACH | |
#define ENETRESET WSAENETRESET | |
#define ECONNABORTED WSAECONNABORTED | |
#define ECONNRESET WSAECONNRESET | |
#define ENOBUFS WSAENOBUFS | |
#define EISCONN WSAEISCONN | |
#define ENOTCONN WSAENOTCONN | |
#define ESHUTDOWN WSAESHUTDOWN | |
#define ETOOMANYREFS WSAETOOMANYREFS | |
#define ETIMEDOUT WSAETIMEDOUT | |
#define ECONNREFUSED WSAECONNREFUSED | |
#define ELOOP WSAELOOP | |
#define ENAMETOOLONG WSAENAMETOOLONG | |
#define EHOSTDOWN WSAEHOSTDOWN | |
#define EHOSTUNREACH WSAEHOSTUNREACH | |
#define ENOTEMPTY WSAENOTEMPTY | |
#define EPROCLIM WSAEPROCLIM | |
#define EUSERS WSAEUSERS | |
#define EDQUOT WSAEDQUOT | |
#define ESTALE WSAESTALE | |
#define EREMOTE WSAEREMOTE | |
#endif | |
/* Socket function prototypes */ | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
SOCKET PASCAL FAR accept (SOCKET s, struct sockaddr FAR *addr, | |
int FAR *addrlen); | |
int PASCAL FAR bind (SOCKET s, const struct sockaddr FAR *addr, int namelen); | |
int PASCAL FAR closesocket (SOCKET s); | |
int PASCAL FAR connect (SOCKET s, const struct sockaddr FAR *name, int namelen); | |
int PASCAL FAR ioctlsocket (SOCKET s, long cmd, u_long FAR *argp); | |
int PASCAL FAR getpeername (SOCKET s, struct sockaddr FAR *name, | |
int FAR * namelen); | |
int PASCAL FAR getsockname (SOCKET s, struct sockaddr FAR *name, | |
int FAR * namelen); | |
int PASCAL FAR getsockopt (SOCKET s, int level, int optname, | |
char FAR * optval, int FAR *optlen); | |
u_long PASCAL FAR htonl (u_long hostlong); | |
u_short PASCAL FAR htons (u_short hostshort); | |
unsigned long PASCAL FAR inet_addr (const char FAR * cp); | |
char FAR * PASCAL FAR inet_ntoa (struct in_addr in); | |
int PASCAL FAR listen (SOCKET s, int backlog); | |
u_long PASCAL FAR ntohl (u_long netlong); | |
u_short PASCAL FAR ntohs (u_short netshort); | |
int PASCAL FAR recv (SOCKET s, char FAR * buf, int len, int flags); | |
int PASCAL FAR recvfrom (SOCKET s, char FAR * buf, int len, int flags, | |
struct sockaddr FAR *from, int FAR * fromlen); | |
#if 0 | |
int PASCAL FAR select (int nfds, fd_set FAR *readfds, fd_set FAR *writefds, | |
fd_set FAR *exceptfds, const struct timeval FAR *timeout); | |
#endif | |
int PASCAL FAR send (SOCKET s, const char FAR * buf, int len, int flags); | |
int PASCAL FAR sendto (SOCKET s, const char FAR * buf, int len, int flags, | |
const struct sockaddr FAR *to, int tolen); | |
int PASCAL FAR setsockopt (SOCKET s, int level, int optname, | |
const char FAR * optval, int optlen); | |
int PASCAL FAR shutdown (SOCKET s, int how); | |
SOCKET PASCAL FAR socket (int af, int type, int protocol); | |
/* Database function prototypes */ | |
struct hostent FAR * PASCAL FAR gethostbyaddr(const char FAR * addr, | |
int len, int type); | |
struct hostent FAR * PASCAL FAR gethostbyname(const char FAR * name); | |
int PASCAL FAR gethostname (char FAR * name, int namelen); | |
struct servent FAR * PASCAL FAR getservbyport(int port, const char FAR * proto); | |
struct servent FAR * PASCAL FAR getservbyname(const char FAR * name, | |
const char FAR * proto); | |
struct protoent FAR * PASCAL FAR getprotobynumber(int proto); | |
struct protoent FAR * PASCAL FAR getprotobyname(const char FAR * name); | |
#ifdef __cplusplus | |
} | |
#endif | |
/* Microsoft Windows Extended data types */ | |
typedef struct sockaddr SOCKADDR; | |
typedef struct sockaddr *PSOCKADDR; | |
typedef struct sockaddr FAR *LPSOCKADDR; | |
typedef struct sockaddr_in SOCKADDR_IN; | |
typedef struct sockaddr_in *PSOCKADDR_IN; | |
typedef struct sockaddr_in FAR *LPSOCKADDR_IN; | |
typedef struct linger LINGER; | |
typedef struct linger *PLINGER; | |
typedef struct linger FAR *LPLINGER; | |
typedef struct in_addr IN_ADDR; | |
typedef struct in_addr *PIN_ADDR; | |
typedef struct in_addr FAR *LPIN_ADDR; | |
typedef struct fd_set FD_SET; | |
typedef struct fd_set *PFD_SET; | |
typedef struct fd_set FAR *LPFD_SET; | |
typedef struct hostent HOSTENT; | |
typedef struct hostent *PHOSTENT; | |
typedef struct hostent FAR *LPHOSTENT; | |
typedef struct servent SERVENT; | |
typedef struct servent *PSERVENT; | |
typedef struct servent FAR *LPSERVENT; | |
typedef struct protoent PROTOENT; | |
typedef struct protoent *PPROTOENT; | |
typedef struct protoent FAR *LPPROTOENT; | |
typedef struct timeval TIMEVAL; | |
typedef struct timeval *PTIMEVAL; | |
typedef struct timeval FAR *LPTIMEVAL; | |
#endif /* _WINSOCKAPI_ */ |