WATSOCK.H
上传用户:qiye66666
上传日期:2007-01-03
资源大小:202k
文件大小:24k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. /* WATSOCK.H--definitions to be used with the WATSOCK.DLL
  2.  *
  3.  */
  4. #ifndef _WINSOCKAPI_
  5. #define _WINSOCKAPI_
  6. /*
  7.  * Pull in WINDOWS.H if necessary
  8.  */
  9. #ifndef _INC_WINDOWS
  10. #include <windows.h>
  11. #endif /* _INC_WINDOWS */
  12. #ifndef FD_SETSIZE
  13. #define FD_SETSIZE      64
  14. #endif /* FD_SETSIZE */
  15. /*
  16.  *             Additional definitions for Waterloo TCP specific
  17.  */
  18. #ifndef MAX_SOCK
  19. #define MAX_SOCK 32
  20. #endif
  21. #define OPEN       1
  22. #define CLOSE      0
  23. #define CONNABORT  -1
  24. #define ISCONNECT  1
  25. #define NOTCONNECT 0
  26. /* define local socket structure to hold the Wat tcp_Sock */
  27. typedef struct {
  28.         int type;
  29.         int status;
  30.         int conn;
  31.         tcp_Socket *tsock;
  32. } L_SOCKET ;
  33. /*
  34.  * TCP states, from tcp manual.
  35.  * Note: close-wait state is bypassed by automatically closing a connection
  36.  *       when a FIN is received.  This is easy to undo.
  37.  */
  38. #define tcp_StateLISTEN  0      /* listening for connection */
  39. #define tcp_StateSYNSENT 1      /* syn sent, active open */
  40. #define tcp_StateSYNREC  2      /* syn received, synack+syn sent. */
  41. #define tcp_StateESTAB   3      /* established */
  42. #define tcp_StateESTCL   4      /* established, but will FIN */
  43. #define tcp_StateFINWT1  5      /* sent FIN */
  44. #define tcp_StateFINWT2  6      /* sent FIN, received FINACK */
  45. #define tcp_StateCLOSWT  7      /* received FIN waiting for close */
  46. #define tcp_StateCLOSING 8      /* sent FIN, received FIN (waiting for FINACK) */
  47. #define tcp_StateLASTACK 9      /* fin received, finack+fin sent */
  48. #define tcp_StateTIMEWT  10     /* dally after sending final FINACK */
  49. #define tcp_StateCLOSEMSL 11
  50. #define tcp_StateCLOSED  12     /* finack received */
  51. /***********    End of Waterloo definition   ************/
  52. /*
  53.  * Basic system type definitions, taken from the BSD file sys/types.h.
  54.  */
  55. typedef unsigned char   u_char;
  56. typedef unsigned short  u_short;
  57. typedef unsigned int    u_int;
  58. typedef unsigned long   u_long;
  59. /*
  60.  * The new type to be used in all
  61.  * instances which refer to sockets.
  62.  */
  63. typedef u_int           SOCKET;
  64. typedef struct fd_set {
  65.         u_short fd_count;               /* how many are SET? */
  66.         SOCKET  fd_array[FD_SETSIZE];   /* an array of SOCKETs */
  67. } fd_set;
  68. extern int PASCAL FAR __WSAFDIsSet(SOCKET fd, fd_set FAR *);
  69. #define FD_CLR(fd, set) { 
  70.     u_int __i; 
  71.     for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { 
  72.         if (((fd_set FAR *)(set))->fd_array[__i] == fd) { 
  73.             while (__i < ((fd_set FAR *)(set))->fd_count-1) { 
  74.                 ((fd_set FAR *)(set))->fd_array[__i] = 
  75.                     ((fd_set FAR *)(set))->fd_array[__i+1]; 
  76.                 __i++; 
  77.             } 
  78.             ((fd_set FAR *)(set))->fd_count--; 
  79.             break; 
  80.         } 
  81.     } 
  82. }
  83. #define FD_SET(fd, set) { 
  84.     if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) 
  85.         ((fd_set FAR *)(set))->fd_array[((fd_set FAR *)(set))->fd_count++]=fd;
  86. }
  87. #define FD_ZERO(set) ((fd_set FAR *)(set))->fd_count=0
  88. #define FD_ISSET(fd,set) __WSAFDIsSet((SOCKET)fd, (fd_set FAR *)set)
  89. /*
  90.  * Structure used in select() call, taken from the BSD file sys/time.h.
  91.  */
  92. struct timeval {
  93.         long    tv_sec;         /* seconds */
  94.         long    tv_usec;        /* and microseconds */
  95. };
  96. /*
  97.  * Operations on timevals.
  98.  *
  99.  * NB: timercmp does not work for >= or <=.
  100.  */
  101. #define timerisset(tvp)         ((tvp)->tv_sec || (tvp)->tv_usec)
  102. #define timercmp(tvp, uvp, cmp) 
  103.         ((tvp)->tv_sec cmp (uvp)->tv_sec || 
  104.          (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
  105. #define timerclear(tvp)         (tvp)->tv_sec = (tvp)->tv_usec = 0
  106. /*
  107.  * Commands for ioctlsocket(),  taken from the BSD file fcntl.h.
  108.  *
  109.  *
  110.  * Ioctl's have the command encoded in the lower word,
  111.  * and the size of any in or out parameters in the upper
  112.  * word.  The high 2 bits of the upper word are used
  113.  * to encode the in/out status of the parameter; for now
  114.  * we restrict parameters to at most 128 bytes.
  115.  */
  116. #define IOCPARM_MASK    0x7f            /* parameters must be < 128 bytes */
  117. #define IOC_VOID        0x20000000      /* no parameters */
  118. #define IOC_OUT         0x40000000      /* copy out parameters */
  119. #define IOC_IN          0x80000000      /* copy in parameters */
  120. #define IOC_INOUT       (IOC_IN|IOC_OUT)
  121.                                         /* 0x20000000 distinguishes new &
  122.                                            old ioctl's */
  123. #define _IO(x,y)        (IOC_VOID|(x<<8)|y)
  124. #define _IOR(x,y,t)     (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
  125. #define _IOW(x,y,t)     (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
  126. #define FIONREAD    _IOR('f', 127, u_long) /* get # bytes to read */
  127. #define FIONBIO     _IOW('f', 126, u_long) /* set/clear non-blocking i/o */
  128. #define FIOASYNC    _IOW('f', 125, u_long) /* set/clear async i/o */
  129. /* Socket I/O Controls */
  130. #define SIOCSHIWAT  _IOW('s',  0, u_long)  /* set high watermark */
  131. #define SIOCGHIWAT  _IOR('s',  1, u_long)  /* get high watermark */
  132. #define SIOCSLOWAT  _IOW('s',  2, u_long)  /* set low watermark */
  133. #define SIOCGLOWAT  _IOR('s',  3, u_long)  /* get low watermark */
  134. #define SIOCATMARK  _IOR('s',  7, u_long)  /* at oob mark? */
  135. /*
  136.  * Structures returned by network data base library, taken from the
  137.  * BSD file netdb.h.  All addresses are supplied in host order, and
  138.  * returned in network order (suitable for use in system calls).
  139.  */
  140. struct  hostent {
  141.         char    FAR * h_name;           /* official name of host */
  142.         char    FAR * FAR * h_aliases;  /* alias list */
  143.         short   h_addrtype;             /* host address type */
  144.         short   h_length;               /* length of address */
  145.         char    FAR * FAR * h_addr_list; /* list of addresses */
  146. #define h_addr  h_addr_list[0]          /* address, for backward compat */
  147. };
  148. /*
  149.  * It is assumed here that a network number
  150.  * fits in 32 bits.
  151.  */
  152. struct  netent {
  153.         char    FAR * n_name;           /* official name of net */
  154.         char    FAR * FAR * n_aliases;  /* alias list */
  155.         short   n_addrtype;             /* net address type */
  156.         u_long  n_net;                  /* network # */
  157. };
  158. struct  servent {
  159.         char    FAR * s_name;           /* official service name */
  160.         char    FAR * FAR * s_aliases;  /* alias list */
  161.         short   s_port;                 /* port # */
  162.         char    FAR * s_proto;          /* protocol to use */
  163. };
  164. struct  protoent {
  165.         char    FAR * p_name;           /* official protocol name */
  166.         char    FAR * FAR * p_aliases;  /* alias list */
  167.         short   p_proto;                /* protocol # */
  168. };
  169. /*
  170.  * Constants and structures defined by the internet system,
  171.  * Per RFC 790, September 1981, taken from the BSD file netinet/in.h.
  172.  */
  173. /*
  174.  * Protocols
  175.  */
  176. #define IPPROTO_IP              0               /* dummy for IP */
  177. #define IPPROTO_ICMP            1               /* control message protocol */
  178. #define IPPROTO_GGP             2               /* gateway^2 (deprecated) */
  179. #define IPPROTO_TCP             6               /* tcp */
  180. #define IPPROTO_PUP             12              /* pup */
  181. #define IPPROTO_UDP             17              /* user datagram protocol */
  182. #define IPPROTO_IDP             22              /* xns idp */
  183. #define IPPROTO_ND              77              /* UNOFFICIAL net disk proto */
  184. #define IPPROTO_RAW             255             /* raw IP packet */
  185. #define IPPROTO_MAX             256
  186. /*
  187.  * Port/socket numbers: network standard functions
  188.  */
  189. #define IPPORT_ECHO             7
  190. #define IPPORT_DISCARD          9
  191. #define IPPORT_SYSTAT           11
  192. #define IPPORT_DAYTIME          13
  193. #define IPPORT_NETSTAT          15
  194. #define IPPORT_FTP              21
  195. #define IPPORT_TELNET           23
  196. #define IPPORT_SMTP             25
  197. #define IPPORT_TIMESERVER       37
  198. #define IPPORT_NAMESERVER       42
  199. #define IPPORT_WHOIS            43
  200. #define IPPORT_MTP              57
  201. /*
  202.  * Port/socket numbers: host specific functions
  203.  */
  204. #define IPPORT_TFTP             69
  205. #define IPPORT_RJE              77
  206. #define IPPORT_FINGER           79
  207. #define IPPORT_TTYLINK          87
  208. #define IPPORT_SUPDUP           95
  209. /*
  210.  * UNIX TCP sockets
  211.  */
  212. #define IPPORT_EXECSERVER       512
  213. #define IPPORT_LOGINSERVER      513
  214. #define IPPORT_CMDSERVER        514
  215. #define IPPORT_EFSSERVER        520
  216. /*
  217.  * UNIX UDP sockets
  218.  */
  219. #define IPPORT_BIFFUDP          512
  220. #define IPPORT_WHOSERVER        513
  221. #define IPPORT_ROUTESERVER      520
  222.                                         /* 520+1 also used */
  223. /*
  224.  * Ports < IPPORT_RESERVED are reserved for
  225.  * privileged processes (e.g. root).
  226.  */
  227. #define IPPORT_RESERVED         1024
  228. /*
  229.  * Link numbers
  230.  */
  231. #define IMPLINK_IP              155
  232. #define IMPLINK_LOWEXPER        156
  233. #define IMPLINK_HIGHEXPER       158
  234. /*
  235.  * Internet address (old style... should be updated)
  236.  */
  237. struct in_addr {
  238.         union {
  239.                 struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
  240.                 struct { u_short s_w1,s_w2; } S_un_w;
  241.                 u_long S_addr;
  242.         } S_un;
  243. #define s_addr  S_un.S_addr
  244.                                 /* can be used for most tcp & ip code */
  245. #define s_host  S_un.S_un_b.s_b2
  246.                                 /* host on imp */
  247. #define s_net   S_un.S_un_b.s_b1
  248.                                 /* network */
  249. #define s_imp   S_un.S_un_w.s_w2
  250.                                 /* imp */
  251. #define s_impno S_un.S_un_b.s_b4
  252.                                 /* imp # */
  253. #define s_lh    S_un.S_un_b.s_b3
  254.                                 /* logical host */
  255. };
  256. /*
  257.  * Definitions of bits in internet address integers.
  258.  * On subnets, the decomposition of addresses to host and net parts
  259.  * is done according to subnet mask, not the masks here.
  260.  */
  261. #define IN_CLASSA(i)            (((long)(i) & 0x80000000) == 0)
  262. #define IN_CLASSA_NET           0xff000000
  263. #define IN_CLASSA_NSHIFT        24
  264. #define IN_CLASSA_HOST          0x00ffffff
  265. #define IN_CLASSA_MAX           128
  266. #define IN_CLASSB(i)            (((long)(i) & 0xc0000000) == 0x80000000)
  267. #define IN_CLASSB_NET           0xffff0000
  268. #define IN_CLASSB_NSHIFT        16
  269. #define IN_CLASSB_HOST          0x0000ffff
  270. #define IN_CLASSB_MAX           65536
  271. #define IN_CLASSC(i)            (((long)(i) & 0xc0000000) == 0xc0000000)
  272. #define IN_CLASSC_NET           0xffffff00
  273. #define IN_CLASSC_NSHIFT        8
  274. #define IN_CLASSC_HOST          0x000000ff
  275. #define INADDR_ANY              (u_long)0x00000000
  276. #define INADDR_LOOPBACK         0x7f000001
  277. #define INADDR_BROADCAST        (u_long)0xffffffff    
  278. #define INADDR_NONE             0xffffffff
  279. /*
  280.  * Socket address, internet style.
  281.  */
  282. struct sockaddr_in {
  283.         short   sin_family;
  284.         u_short sin_port;
  285.         struct  in_addr sin_addr;
  286.         char    sin_zero[8];
  287. };
  288. #define WSADESCRIPTION_LEN      256
  289. #define WSASYS_STATUS_LEN       128
  290. typedef struct WSAData {
  291.         WORD                    wVersion;
  292.         WORD                    wHighVersion;
  293.         char                    szDescription[WSADESCRIPTION_LEN+1];
  294.         char                    szSystemStatus[WSASYS_STATUS_LEN+1];
  295.         long                    iMaxSockets;
  296.         long                    iMaxUdpDg;
  297.         char FAR *              lpVendorInfo;
  298. } WSADATA;
  299. typedef WSADATA FAR *LPWSADATA;
  300. /*
  301.  * Options for use with [gs]etsockopt at the IP level.
  302.  */
  303. #define IP_OPTIONS      1               /* set/get IP per-packet options */
  304. /*
  305.  * Definitions related to sockets: types, address families, options,
  306.  * taken from the BSD file sys/socket.h.
  307.  */
  308. /*
  309.  * This is used instead of -1, since the
  310.  * SOCKET type is unsigned.
  311.  */
  312. #define INVALID_SOCKET  (SOCKET)(~0)
  313. #define SOCKET_ERROR            (-1)
  314. /*
  315.  * Types
  316.  */
  317. #define SOCK_STREAM     1               /* stream socket */
  318. #define SOCK_DGRAM      2               /* datagram socket */
  319. #define SOCK_RAW        3               /* raw-protocol interface */
  320. #define SOCK_RDM        4               /* reliably-delivered message */
  321. #define SOCK_SEQPACKET  5               /* sequenced packet stream */
  322. /*
  323.  * Option flags per-socket.
  324.  */
  325. #define SO_DEBUG        0x0001          /* turn on debugging info recording */
  326. #define SO_ACCEPTCONN   0x0002          /* socket has had listen() */
  327. #define SO_REUSEADDR    0x0004          /* allow local address reuse */
  328. #define SO_KEEPALIVE    0x0008          /* keep connections alive */
  329. #define SO_DONTROUTE    0x0010          /* just use interface addresses */
  330. #define SO_BROADCAST    0x0020          /* permit sending of broadcast msgs */
  331. #define SO_USELOOPBACK  0x0040          /* bypass hardware when possible */
  332. #define SO_LINGER       0x0080          /* linger on close if data present */
  333. #define SO_OOBINLINE    0x0100          /* leave received OOB data in line */
  334. #define SO_DONTLINGER   (u_int)(~SO_LINGER)
  335. /*
  336.  * Additional options.
  337.  */
  338. #define SO_SNDBUF       0x1001          /* send buffer size */
  339. #define SO_RCVBUF       0x1002          /* receive buffer size */
  340. #define SO_SNDLOWAT     0x1003          /* send low-water mark */
  341. #define SO_RCVLOWAT     0x1004          /* receive low-water mark */
  342. #define SO_SNDTIMEO     0x1005          /* send timeout */
  343. #define SO_RCVTIMEO     0x1006          /* receive timeout */
  344. #define SO_ERROR        0x1007          /* get error status and clear */
  345. #define SO_TYPE         0x1008          /* get socket type */
  346. /*
  347.  * Address families.
  348.  */
  349. #define AF_UNSPEC       0               /* unspecified */
  350. #define AF_UNIX         1               /* local to host (pipes, portals) */
  351. #define AF_INET         2               /* internetwork: UDP, TCP, etc. */
  352. #define AF_IMPLINK      3               /* arpanet imp addresses */
  353. #define AF_PUP          4               /* pup protocols: e.g. BSP */
  354. #define AF_CHAOS        5               /* mit CHAOS protocols */
  355. #define AF_NS           6               /* XEROX NS protocols */
  356. #define AF_NBS          7               /* nbs protocols */
  357. #define AF_ECMA         8               /* european computer manufacturers */
  358. #define AF_DATAKIT      9               /* datakit protocols */
  359. #define AF_CCITT        10              /* CCITT protocols, X.25 etc */
  360. #define AF_SNA          11              /* IBM SNA */
  361. #define AF_DECnet       12              /* DECnet */
  362. #define AF_DLI          13              /* Direct data link interface */
  363. #define AF_LAT          14              /* LAT */
  364. #define AF_HYLINK       15              /* NSC Hyperchannel */
  365. #define AF_APPLETALK    16              /* AppleTalk */
  366. #define AF_NETBIOS      17              /* NetBios-style addresses */
  367. #define AF_MAX          18
  368. /*
  369.  * Structure used by kernel to pass protocol
  370.  * information in raw sockets.
  371.  */
  372. struct sockproto {
  373.         u_short sp_family;              /* address family */
  374.         u_short sp_protocol;            /* protocol */
  375. };
  376. /*
  377.  * Protocol families, same as address families for now.
  378.  */
  379. #define PF_UNSPEC       AF_UNSPEC
  380. #define PF_UNIX         AF_UNIX
  381. #define PF_INET         AF_INET
  382. #define PF_IMPLINK      AF_IMPLINK
  383. #define PF_PUP          AF_PUP
  384. #define PF_CHAOS        AF_CHAOS
  385. #define PF_NS           AF_NS
  386. #define PF_NBS          AF_NBS
  387. #define PF_ECMA         AF_ECMA
  388. #define PF_DATAKIT      AF_DATAKIT
  389. #define PF_CCITT        AF_CCITT
  390. #define PF_SNA          AF_SNA
  391. #define PF_DECnet       AF_DECnet
  392. #define PF_DLI          AF_DLI
  393. #define PF_LAT          AF_LAT
  394. #define PF_HYLINK       AF_HYLINK
  395. #define PF_APPLETALK    AF_APPLETALK
  396. #define PF_MAX          AF_MAX
  397. /*
  398.  * Structure used for manipulating linger option.
  399.  */
  400. struct  linger {
  401.         u_short l_onoff;                /* option on/off */
  402.         u_short l_linger;               /* linger time */
  403. };
  404. /*
  405.  * Level number for (get/set)sockopt() to apply to socket itself.
  406.  */
  407. #define SOL_SOCKET      0xffff          /* options for socket level */
  408. /*
  409.  * Maximum queue length specifiable by listen.
  410.  */
  411. #define SOMAXCONN       5
  412. #define MSG_OOB         0x1             /* process out-of-band data */
  413. #define MSG_PEEK        0x2             /* peek at incoming message */
  414. #define MSG_DONTROUTE   0x4             /* send without using routing tables */
  415. #define MSG_MAXIOVLEN   16
  416. /*
  417.  * Define constant based on rfc883, used by gethostbyxxxx() calls.
  418.  */
  419. #define MAXGETHOSTSTRUCT        1024
  420. /*
  421.  * Define flags to be used with the WSAAsyncSelect() call.
  422.  */
  423. #define FD_READ         0x01
  424. #define FD_WRITE        0x02
  425. #define FD_OOB          0x04
  426. #define FD_ACCEPT       0x08
  427. #define FD_CONNECT      0x10
  428. #define FD_CLOSE        0x20
  429. /*
  430.  * All Windows Sockets error constants are biased by WSABASEERR from
  431.  * the "normal"
  432.  */
  433. #define WSABASEERR              10000
  434. /*
  435.  * Windows Sockets definitions of regular Microsoft C error constants
  436.  */
  437. #define WSAEINTR                (WSABASEERR+4)
  438. #define WSAEBADF                (WSABASEERR+9)
  439. #define WSAEACCES               (WSABASEERR+13)
  440. #define WSAEFAULT               (WSABASEERR+14)
  441. #define WSAEINVAL               (WSABASEERR+22)
  442. #define WSAEMFILE               (WSABASEERR+24)
  443. /*
  444.  * Windows Sockets definitions of regular Berkeley error constants
  445.  */
  446. #define WSAEWOULDBLOCK          (WSABASEERR+35)
  447. #define WSAEINPROGRESS          (WSABASEERR+36)
  448. #define WSAEALREADY             (WSABASEERR+37)
  449. #define WSAENOTSOCK             (WSABASEERR+38)
  450. #define WSAEDESTADDRREQ         (WSABASEERR+39)
  451. #define WSAEMSGSIZE             (WSABASEERR+40)
  452. #define WSAEPROTOTYPE           (WSABASEERR+41)
  453. #define WSAENOPROTOOPT          (WSABASEERR+42)
  454. #define WSAEPROTONOSUPPORT      (WSABASEERR+43)
  455. #define WSAESOCKTNOSUPPORT      (WSABASEERR+44)
  456. #define WSAEOPNOTSUPP           (WSABASEERR+45)
  457. #define WSAEPFNOSUPPORT         (WSABASEERR+46)
  458. #define WSAEAFNOSUPPORT         (WSABASEERR+47)
  459. #define WSAEADDRINUSE           (WSABASEERR+48)
  460. #define WSAEADDRNOTAVAIL        (WSABASEERR+49)
  461. #define WSAENETDOWN             (WSABASEERR+50)
  462. #define WSAENETUNREACH          (WSABASEERR+51)
  463. #define WSAENETRESET            (WSABASEERR+52)
  464. #define WSAECONNABORTED         (WSABASEERR+53)
  465. #define WSAECONNRESET           (WSABASEERR+54)
  466. #define WSAENOBUFS              (WSABASEERR+55)
  467. #define WSAEISCONN              (WSABASEERR+56)
  468. #define WSAENOTCONN             (WSABASEERR+57)
  469. #define WSAESHUTDOWN            (WSABASEERR+58)
  470. #define WSAETOOMANYREFS         (WSABASEERR+59)
  471. #define WSAETIMEDOUT            (WSABASEERR+60)
  472. #define WSAECONNREFUSED         (WSABASEERR+61)
  473. #define WSAELOOP                (WSABASEERR+62)
  474. #define WSAENAMETOOLONG         (WSABASEERR+63)
  475. #define WSAEHOSTDOWN            (WSABASEERR+64)
  476. #define WSAEHOSTUNREACH         (WSABASEERR+65)
  477. #define WSAENOTEMPTY            (WSABASEERR+66)
  478. #define WSAEPROCLIM             (WSABASEERR+67)
  479. #define WSAEUSERS               (WSABASEERR+68)
  480. #define WSAEDQUOT               (WSABASEERR+69)
  481. #define WSAESTALE               (WSABASEERR+70)
  482. #define WSAEREMOTE              (WSABASEERR+71)
  483. /*
  484.  * Extended Windows Sockets error constant definitions
  485.  */
  486. #define WSASYSNOTREADY          (WSABASEERR+91)
  487. #define WSAVERNOTSUPPORTED      (WSABASEERR+92)
  488. #define WSANOTINITIALISED       (WSABASEERR+93)
  489. /*
  490.  * Error return codes from gethostbyname() and gethostbyaddr()
  491.  * (when using the resolver). Note that these errors are
  492.  * retrieved via WSAGetLastError() and must therefore follow
  493.  * the rules for avoiding clashes with error numbers from
  494.  * specific implementations or language run-time systems.
  495.  * For this reason the codes are based at WSABASEERR+1001.
  496.  * Note also that [WSA]NO_ADDRESS is defined only for
  497.  * compatibility purposes.
  498.  */
  499. #define h_errno         WSAGetLastError()
  500. /* Authoritative Answer: Host not found */
  501. #define WSAHOST_NOT_FOUND       (WSABASEERR+1001)
  502. #define HOST_NOT_FOUND          WSAHOST_NOT_FOUND
  503. /* Non-Authoritative: Host not found, or SERVERFAIL */
  504. #define WSATRY_AGAIN            (WSABASEERR+1002)
  505. #define TRY_AGAIN               WSATRY_AGAIN
  506. /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
  507. #define WSANO_RECOVERY          (WSABASEERR+1003)
  508. #define NO_RECOVERY             WSANO_RECOVERY
  509. /* Valid name, no data record of requested type */
  510. #define WSANO_DATA              (WSABASEERR+1004)
  511. #define NO_DATA                 WSANO_DATA
  512. /* no address, look for MX record */
  513. #define WSANO_ADDRESS           WSANO_DATA
  514. #define NO_ADDRESS              WSANO_ADDRESS
  515. /*
  516.  * Windows Sockets errors redefined as regular Berkeley error constants
  517.  */
  518. #define EWOULDBLOCK             WSAEWOULDBLOCK
  519. #define EINPROGRESS             WSAEINPROGRESS
  520. #define EALREADY                WSAEALREADY
  521. #define ENOTSOCK                WSAENOTSOCK
  522. #define EDESTADDRREQ            WSAEDESTADDRREQ
  523. #define EMSGSIZE                WSAEMSGSIZE
  524. #define EPROTOTYPE              WSAEPROTOTYPE
  525. #define ENOPROTOOPT             WSAENOPROTOOPT
  526. #define EPROTONOSUPPORT         WSAEPROTONOSUPPORT
  527. #define ESOCKTNOSUPPORT         WSAESOCKTNOSUPPORT
  528. #define EOPNOTSUPP              WSAEOPNOTSUPP
  529. #define EPFNOSUPPORT            WSAEPFNOSUPPORT
  530. #define EAFNOSUPPORT            WSAEAFNOSUPPORT
  531. #define EADDRINUSE              WSAEADDRINUSE
  532. #define EADDRNOTAVAIL           WSAEADDRNOTAVAIL
  533. #define ENETDOWN                WSAENETDOWN
  534. #define ENETUNREACH             WSAENETUNREACH
  535. #define ENETRESET               WSAENETRESET
  536. #define ECONNABORTED            WSAECONNABORTED
  537. #define ECONNRESET              WSAECONNRESET
  538. #define ENOBUFS                 WSAENOBUFS
  539. #define EISCONN                 WSAEISCONN
  540. #define ENOTCONN                WSAENOTCONN
  541. #define ESHUTDOWN               WSAESHUTDOWN
  542. #define ETOOMANYREFS            WSAETOOMANYREFS
  543. #define ETIMEDOUT               WSAETIMEDOUT
  544. #define ECONNREFUSED            WSAECONNREFUSED
  545. #define ELOOP                   WSAELOOP
  546. #define ENAMETOOLONG            WSAENAMETOOLONG
  547. #define EHOSTDOWN               WSAEHOSTDOWN
  548. #define EHOSTUNREACH            WSAEHOSTUNREACH
  549. #define ENOTEMPTY               WSAENOTEMPTY
  550. #define EPROCLIM                WSAEPROCLIM
  551. #define EUSERS                  WSAEUSERS
  552. #define EDQUOT                  WSAEDQUOT
  553. #define ESTALE                  WSAESTALE
  554. #define EREMOTE                 WSAEREMOTE
  555. /* Socket function prototypes */
  556. int PASCAL FAR wattcp_init(void);
  557. int PASCAL FAR wat_closesocket (SOCKET s);
  558. int PASCAL FAR wat_connect (SOCKET s, struct sockaddr FAR *name, int namelen);
  559. u_long PASCAL FAR wat_htonl (u_long hostlong);
  560. u_short PASCAL FAR wat_htons (u_short hostshort);
  561. unsigned long PASCAL FAR wat_inet_addr (char FAR * cp);
  562. u_long PASCAL FAR wat_ntohl (u_long netlong);
  563. u_short PASCAL FAR wat_ntohs (u_short netshort);
  564. int PASCAL FAR wat_receive (SOCKET s, char FAR *buf, int len, int flags);
  565. int PASCAL FAR wat_select (int nfds, fd_set FAR *readfds, fd_set FAR *writefds,
  566.                        fd_set FAR *exceptfds, struct timeval FAR *timeout);
  567. int PASCAL FAR wat_send (SOCKET s, char FAR * buf, int len, int flags);
  568. SOCKET PASCAL FAR wat_socket (int af, int type, int protocol);
  569. /* Database function prototypes */
  570. struct hostent FAR * PASCAL FAR gethostbyaddr(char FAR * addr,
  571.                                               int len, int type);
  572. struct hostent FAR * PASCAL FAR gethostbyname(char FAR * name);
  573. struct servent FAR * PASCAL FAR getservbyport(int port, char FAR * proto);
  574. struct servent FAR * PASCAL FAR getservbyname(char FAR * name,
  575.                                               char FAR * proto);
  576. struct protoent FAR * PASCAL FAR getprotobynumber(int proto);
  577. struct protoent FAR * PASCAL FAR getprotobyname(char FAR * name);
  578. #endif  /* _WINSOCKAPI_ */