home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / winsock2.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  101KB  |  3,725 lines

  1. /* Winsock2.h -- definitions to be used with the WinSock 2 DLL and
  2.  *               WinSock 2 applications.
  3.  *
  4.  * This header file corresponds to version 2.2.x of the WinSock API
  5.  * specification.
  6.  *
  7.  * This file includes parts which are Copyright (c) 1982-1986 Regents
  8.  * of the University of California.  All rights reserved.  The
  9.  * Berkeley Software License Agreement specifies the terms and
  10.  * conditions for redistribution.
  11.  */
  12.  
  13. #ifndef _WINSOCK2API_
  14. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  15. #define _WINSOCK2API_
  16. #define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */
  17.  
  18. /*
  19.  * Ensure structures are packed consistently.
  20.  */
  21.  
  22. #ifndef _WIN64
  23. #include <pshpack4.h>
  24. #endif
  25.  
  26. /*
  27.  * Default: include function prototypes, don't include function typedefs.
  28.  */
  29.  
  30. #ifndef INCL_WINSOCK_API_PROTOTYPES
  31. #define INCL_WINSOCK_API_PROTOTYPES 1
  32. #endif
  33.  
  34. #ifndef INCL_WINSOCK_API_TYPEDEFS
  35. #define INCL_WINSOCK_API_TYPEDEFS 0
  36. #endif
  37.  
  38. /*
  39.  * Pull in WINDOWS.H if necessary
  40.  */
  41. #ifndef _INC_WINDOWS
  42. #include <windows.h>
  43. #endif /* _INC_WINDOWS */
  44.  
  45. /*
  46.  * Define the current Winsock version. To build an earlier Winsock version
  47.  * application redefine this value prior to including Winsock2.h.
  48.  */
  49.  
  50. #if !defined(MAKEWORD)
  51. #define MAKEWORD(low,high) \
  52.         ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8))
  53. #endif
  54.  
  55. #ifndef WINSOCK_VERSION
  56. #define WINSOCK_VERSION MAKEWORD(2,2)
  57. #endif
  58.  
  59. /*
  60.  * Establish DLL function linkage if supported by the current build
  61.  * environment and not previously defined.
  62.  */
  63.  
  64. #ifndef WINSOCK_API_LINKAGE
  65. #ifdef DECLSPEC_IMPORT
  66. #define WINSOCK_API_LINKAGE DECLSPEC_IMPORT
  67. #else
  68. #define WINSOCK_API_LINKAGE
  69. #endif
  70. #endif
  71.  
  72. #ifdef __cplusplus
  73. extern "C" {
  74. #endif
  75.  
  76. /*
  77.  * Basic system type definitions, taken from the BSD file sys/types.h.
  78.  */
  79. typedef unsigned char   u_char;
  80. typedef unsigned short  u_short;
  81. typedef unsigned int    u_int;
  82. typedef unsigned long   u_long;
  83.  
  84.  
  85. /*
  86.  * The new type to be used in all
  87.  * instances which refer to sockets.
  88.  */
  89. typedef UINT_PTR        SOCKET;
  90.  
  91. /*
  92.  * Select uses arrays of SOCKETs.  These macros manipulate such
  93.  * arrays.  FD_SETSIZE may be defined by the user before including
  94.  * this file, but the default here should be >= 64.
  95.  *
  96.  * CAVEAT IMPLEMENTOR and USER: THESE MACROS AND TYPES MUST BE
  97.  * INCLUDED IN WINSOCK2.H EXACTLY AS SHOWN HERE.
  98.  */
  99. #ifndef FD_SETSIZE
  100. #define FD_SETSIZE      64
  101. #endif /* FD_SETSIZE */
  102.  
  103. typedef struct fd_set {
  104.         u_int fd_count;               /* how many are SET? */
  105.         SOCKET  fd_array[FD_SETSIZE];   /* an array of SOCKETs */
  106. } fd_set;
  107.  
  108. extern int PASCAL FAR __WSAFDIsSet(SOCKET, fd_set FAR *);
  109.  
  110. #define FD_CLR(fd, set) do { \
  111.     u_int __i; \
  112.     for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { \
  113.         if (((fd_set FAR *)(set))->fd_array[__i] == fd) { \
  114.             while (__i < ((fd_set FAR *)(set))->fd_count-1) { \
  115.                 ((fd_set FAR *)(set))->fd_array[__i] = \
  116.                     ((fd_set FAR *)(set))->fd_array[__i+1]; \
  117.                 __i++; \
  118.             } \
  119.             ((fd_set FAR *)(set))->fd_count--; \
  120.             break; \
  121.         } \
  122.     } \
  123. } while(0)
  124.  
  125. #define FD_SET(fd, set) do { \
  126.     u_int __i; \
  127.     for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
  128.         if (((fd_set FAR *)(set))->fd_array[__i] == (fd)) { \
  129.             break; \
  130.         } \
  131.     } \
  132.     if (__i == ((fd_set FAR *)(set))->fd_count) { \
  133.         if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { \
  134.             ((fd_set FAR *)(set))->fd_array[__i] = (fd); \
  135.             ((fd_set FAR *)(set))->fd_count++; \
  136.         } \
  137.     } \
  138. } while(0)
  139.  
  140. #define FD_ZERO(set) (((fd_set FAR *)(set))->fd_count=0)
  141.  
  142. #define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set FAR *)(set))
  143.  
  144. /*
  145.  * Structure used in select() call, taken from the BSD file sys/time.h.
  146.  */
  147. struct timeval {
  148.         long    tv_sec;         /* seconds */
  149.         long    tv_usec;        /* and microseconds */
  150. };
  151.  
  152. /*
  153.  * Operations on timevals.
  154.  *
  155.  * NB: timercmp does not work for >= or <=.
  156.  */
  157. #define timerisset(tvp)         ((tvp)->tv_sec || (tvp)->tv_usec)
  158. #define timercmp(tvp, uvp, cmp) \
  159.         ((tvp)->tv_sec cmp (uvp)->tv_sec || \
  160.          (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
  161. #define timerclear(tvp)         (tvp)->tv_sec = (tvp)->tv_usec = 0
  162.  
  163. /*
  164.  * Commands for ioctlsocket(),  taken from the BSD file fcntl.h.
  165.  *
  166.  *
  167.  * Ioctl's have the command encoded in the lower word,
  168.  * and the size of any in or out parameters in the upper
  169.  * word.  The high 2 bits of the upper word are used
  170.  * to encode the in/out status of the parameter; for now
  171.  * we restrict parameters to at most 128 bytes.
  172.  */
  173. #define IOCPARM_MASK    0x7f            /* parameters must be < 128 bytes */
  174. #define IOC_VOID        0x20000000      /* no parameters */
  175. #define IOC_OUT         0x40000000      /* copy out parameters */
  176. #define IOC_IN          0x80000000      /* copy in parameters */
  177. #define IOC_INOUT       (IOC_IN|IOC_OUT)
  178.                                         /* 0x20000000 distinguishes new &
  179.                                            old ioctl's */
  180. #define _IO(x,y)        (IOC_VOID|((x)<<8)|(y))
  181.  
  182. #define _IOR(x,y,t)     (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
  183.  
  184. #define _IOW(x,y,t)     (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
  185.  
  186. #define FIONREAD    _IOR('f', 127, u_long) /* get # bytes to read */
  187. #define FIONBIO     _IOW('f', 126, u_long) /* set/clear non-blocking i/o */
  188. #define FIOASYNC    _IOW('f', 125, u_long) /* set/clear async i/o */
  189.  
  190. /* Socket I/O Controls */
  191. #define SIOCSHIWAT  _IOW('s',  0, u_long)  /* set high watermark */
  192. #define SIOCGHIWAT  _IOR('s',  1, u_long)  /* get high watermark */
  193. #define SIOCSLOWAT  _IOW('s',  2, u_long)  /* set low watermark */
  194. #define SIOCGLOWAT  _IOR('s',  3, u_long)  /* get low watermark */
  195. #define SIOCATMARK  _IOR('s',  7, u_long)  /* at oob mark? */
  196.  
  197. /*
  198.  * Structures returned by network data base library, taken from the
  199.  * BSD file netdb.h.  All addresses are supplied in host order, and
  200.  * returned in network order (suitable for use in system calls).
  201.  */
  202.  
  203. struct  hostent {
  204.         char    FAR * h_name;           /* official name of host */
  205.         char    FAR * FAR * h_aliases;  /* alias list */
  206.         short   h_addrtype;             /* host address type */
  207.         short   h_length;               /* length of address */
  208.         char    FAR * FAR * h_addr_list; /* list of addresses */
  209. #define h_addr  h_addr_list[0]          /* address, for backward compat */
  210. };
  211.  
  212. /*
  213.  * It is assumed here that a network number
  214.  * fits in 32 bits.
  215.  */
  216. struct  netent {
  217.         char    FAR * n_name;           /* official name of net */
  218.         char    FAR * FAR * n_aliases;  /* alias list */
  219.         short   n_addrtype;             /* net address type */
  220.         u_long  n_net;                  /* network # */
  221. };
  222.  
  223. struct  servent {
  224.         char    FAR * s_name;           /* official service name */
  225.         char    FAR * FAR * s_aliases;  /* alias list */
  226. #ifdef _WIN64
  227.         char    FAR * s_proto;          /* protocol to use */
  228.         short   s_port;                 /* port # */
  229. #else
  230.         short   s_port;                 /* port # */
  231.         char    FAR * s_proto;          /* protocol to use */
  232. #endif
  233. };
  234.  
  235. struct  protoent {
  236.         char    FAR * p_name;           /* official protocol name */
  237.         char    FAR * FAR * p_aliases;  /* alias list */
  238.         short   p_proto;                /* protocol # */
  239. };
  240.  
  241. /*
  242.  * Constants and structures defined by the internet system,
  243.  * Per RFC 790, September 1981, taken from the BSD file netinet/in.h.
  244.  */
  245.  
  246. /*
  247.  * Protocols
  248.  */
  249. #define IPPROTO_IP              0               /* dummy for IP */
  250. #define IPPROTO_ICMP            1               /* control message protocol */
  251. #define IPPROTO_IGMP            2               /* internet group management protocol */
  252. #define IPPROTO_GGP             3               /* gateway^2 (deprecated) */
  253. #define IPPROTO_TCP             6               /* tcp */
  254. #define IPPROTO_PUP             12              /* pup */
  255. #define IPPROTO_UDP             17              /* user datagram protocol */
  256. #define IPPROTO_IDP             22              /* xns idp */
  257. #define IPPROTO_ND              77              /* UNOFFICIAL net disk proto */
  258.  
  259. #define IPPROTO_RAW             255             /* raw IP packet */
  260. #define IPPROTO_MAX             256
  261.  
  262. /*
  263.  * Port/socket numbers: network standard functions
  264.  */
  265. #define IPPORT_ECHO             7
  266. #define IPPORT_DISCARD          9
  267. #define IPPORT_SYSTAT           11
  268. #define IPPORT_DAYTIME          13
  269. #define IPPORT_NETSTAT          15
  270. #define IPPORT_FTP              21
  271. #define IPPORT_TELNET           23
  272. #define IPPORT_SMTP             25
  273. #define IPPORT_TIMESERVER       37
  274. #define IPPORT_NAMESERVER       42
  275. #define IPPORT_WHOIS            43
  276. #define IPPORT_MTP              57
  277.  
  278. /*
  279.  * Port/socket numbers: host specific functions
  280.  */
  281. #define IPPORT_TFTP             69
  282. #define IPPORT_RJE              77
  283. #define IPPORT_FINGER           79
  284. #define IPPORT_TTYLINK          87
  285. #define IPPORT_SUPDUP           95
  286.  
  287. /*
  288.  * UNIX TCP sockets
  289.  */
  290. #define IPPORT_EXECSERVER       512
  291. #define IPPORT_LOGINSERVER      513
  292. #define IPPORT_CMDSERVER        514
  293. #define IPPORT_EFSSERVER        520
  294.  
  295. /*
  296.  * UNIX UDP sockets
  297.  */
  298. #define IPPORT_BIFFUDP          512
  299. #define IPPORT_WHOSERVER        513
  300. #define IPPORT_ROUTESERVER      520
  301.                                         /* 520+1 also used */
  302.  
  303. /*
  304.  * Ports < IPPORT_RESERVED are reserved for
  305.  * privileged processes (e.g. root).
  306.  */
  307. #define IPPORT_RESERVED         1024
  308.  
  309. /*
  310.  * Link numbers
  311.  */
  312. #define IMPLINK_IP              155
  313. #define IMPLINK_LOWEXPER        156
  314. #define IMPLINK_HIGHEXPER       158
  315.  
  316. /*
  317.  * Internet address (old style... should be updated)
  318.  */
  319. struct in_addr {
  320.         union {
  321.                 struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
  322.                 struct { u_short s_w1,s_w2; } S_un_w;
  323.                 u_long S_addr;
  324.         } S_un;
  325. #define s_addr  S_un.S_addr
  326.                                 /* can be used for most tcp & ip code */
  327. #define s_host  S_un.S_un_b.s_b2
  328.                                 /* host on imp */
  329. #define s_net   S_un.S_un_b.s_b1
  330.                                 /* network */
  331. #define s_imp   S_un.S_un_w.s_w2
  332.                                 /* imp */
  333. #define s_impno S_un.S_un_b.s_b4
  334.                                 /* imp # */
  335. #define s_lh    S_un.S_un_b.s_b3
  336.                                 /* logical host */
  337. };
  338.  
  339. /*
  340.  * Definitions of bits in internet address integers.
  341.  * On subnets, the decomposition of addresses to host and net parts
  342.  * is done according to subnet mask, not the masks here.
  343.  */
  344. #define IN_CLASSA(i)            (((long)(i) & 0x80000000) == 0)
  345. #define IN_CLASSA_NET           0xff000000
  346. #define IN_CLASSA_NSHIFT        24
  347. #define IN_CLASSA_HOST          0x00ffffff
  348. #define IN_CLASSA_MAX           128
  349.  
  350. #define IN_CLASSB(i)            (((long)(i) & 0xc0000000) == 0x80000000)
  351. #define IN_CLASSB_NET           0xffff0000
  352. #define IN_CLASSB_NSHIFT        16
  353. #define IN_CLASSB_HOST          0x0000ffff
  354. #define IN_CLASSB_MAX           65536
  355.  
  356. #define IN_CLASSC(i)            (((long)(i) & 0xe0000000) == 0xc0000000)
  357. #define IN_CLASSC_NET           0xffffff00
  358. #define IN_CLASSC_NSHIFT        8
  359. #define IN_CLASSC_HOST          0x000000ff
  360.  
  361. #define IN_CLASSD(i)            (((long)(i) & 0xf0000000) == 0xe0000000)
  362. #define IN_CLASSD_NET           0xf0000000       /* These ones aren't really */
  363. #define IN_CLASSD_NSHIFT        28               /* net and host fields, but */
  364. #define IN_CLASSD_HOST          0x0fffffff       /* routing needn't know.    */
  365. #define IN_MULTICAST(i)         IN_CLASSD(i)
  366.  
  367. #define INADDR_ANY              (u_long)0x00000000
  368. #define INADDR_LOOPBACK         0x7f000001
  369. #define INADDR_BROADCAST        (u_long)0xffffffff
  370. #define INADDR_NONE             0xffffffff
  371.  
  372. #define ADDR_ANY                INADDR_ANY
  373.  
  374. /*
  375.  * Socket address, internet style.
  376.  */
  377. struct sockaddr_in {
  378.         short   sin_family;
  379.         u_short sin_port;
  380.         struct  in_addr sin_addr;
  381.         char    sin_zero[8];
  382. };
  383.  
  384. #define WSADESCRIPTION_LEN      256
  385. #define WSASYS_STATUS_LEN       128
  386.  
  387. typedef struct WSAData {
  388.         WORD                    wVersion;
  389.         WORD                    wHighVersion;
  390. #ifdef _WIN64
  391.         unsigned short          iMaxSockets;
  392.         unsigned short          iMaxUdpDg;
  393.         char FAR *              lpVendorInfo;
  394.         char                    szDescription[WSADESCRIPTION_LEN+1];
  395.         char                    szSystemStatus[WSASYS_STATUS_LEN+1];
  396. #else
  397.         char                    szDescription[WSADESCRIPTION_LEN+1];
  398.         char                    szSystemStatus[WSASYS_STATUS_LEN+1];
  399.         unsigned short          iMaxSockets;
  400.         unsigned short          iMaxUdpDg;
  401.         char FAR *              lpVendorInfo;
  402. #endif
  403. } WSADATA, FAR * LPWSADATA;
  404.  
  405. /*
  406.  * Definitions related to sockets: types, address families, options,
  407.  * taken from the BSD file sys/socket.h.
  408.  */
  409.  
  410. /*
  411.  * This is used instead of -1, since the
  412.  * SOCKET type is unsigned.
  413.  */
  414. #define INVALID_SOCKET  (SOCKET)(~0)
  415. #define SOCKET_ERROR            (-1)
  416.  
  417. /*
  418.  * The  following  may  be used in place of the address family, socket type, or
  419.  * protocol  in  a  call  to WSASocket to indicate that the corresponding value
  420.  * should  be taken from the supplied WSAPROTOCOL_INFO structure instead of the
  421.  * parameter itself.
  422.  */
  423. #define FROM_PROTOCOL_INFO (-1)
  424.  
  425. /*
  426.  * Types
  427.  */
  428. #define SOCK_STREAM     1               /* stream socket */
  429. #define SOCK_DGRAM      2               /* datagram socket */
  430. #define SOCK_RAW        3               /* raw-protocol interface */
  431. #define SOCK_RDM        4               /* reliably-delivered message */
  432. #define SOCK_SEQPACKET  5               /* sequenced packet stream */
  433.  
  434. /*
  435.  * Option flags per-socket.
  436.  */
  437. #define SO_DEBUG        0x0001          /* turn on debugging info recording */
  438. #define SO_ACCEPTCONN   0x0002          /* socket has had listen() */
  439. #define SO_REUSEADDR    0x0004          /* allow local address reuse */
  440. #define SO_KEEPALIVE    0x0008          /* keep connections alive */
  441. #define SO_DONTROUTE    0x0010          /* just use interface addresses */
  442. #define SO_BROADCAST    0x0020          /* permit sending of broadcast msgs */
  443. #define SO_USELOOPBACK  0x0040          /* bypass hardware when possible */
  444. #define SO_LINGER       0x0080          /* linger on close if data present */
  445. #define SO_OOBINLINE    0x0100          /* leave received OOB data in line */
  446.  
  447. #define SO_DONTLINGER   (int)(~SO_LINGER)
  448. #define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR)) /* disallow local address reuse */
  449.  
  450. /*
  451.  * Additional options.
  452.  */
  453. #define SO_SNDBUF       0x1001          /* send buffer size */
  454. #define SO_RCVBUF       0x1002          /* receive buffer size */
  455. #define SO_SNDLOWAT     0x1003          /* send low-water mark */
  456. #define SO_RCVLOWAT     0x1004          /* receive low-water mark */
  457. #define SO_SNDTIMEO     0x1005          /* send timeout */
  458. #define SO_RCVTIMEO     0x1006          /* receive timeout */
  459. #define SO_ERROR        0x1007          /* get error status and clear */
  460. #define SO_TYPE         0x1008          /* get socket type */
  461.  
  462. /*
  463.  * WinSock 2 extension -- new options
  464.  */
  465. #define SO_GROUP_ID       0x2001      /* ID of a socket group */
  466. #define SO_GROUP_PRIORITY 0x2002      /* the relative priority within a group*/
  467. #define SO_MAX_MSG_SIZE   0x2003      /* maximum message size */
  468. #define SO_PROTOCOL_INFOA 0x2004      /* WSAPROTOCOL_INFOA structure */
  469. #define SO_PROTOCOL_INFOW 0x2005      /* WSAPROTOCOL_INFOW structure */
  470. #ifdef UNICODE
  471. #define SO_PROTOCOL_INFO  SO_PROTOCOL_INFOW
  472. #else
  473. #define SO_PROTOCOL_INFO  SO_PROTOCOL_INFOA
  474. #endif /* UNICODE */
  475. #define PVD_CONFIG        0x3001       /* configuration info for service provider */
  476. #define SO_CONDITIONAL_ACCEPT 0x3002   /* enable true conditional accept: */
  477.                                        /*  connection is not ack-ed to the */
  478.                                        /*  other side until conditional */
  479.                                        /*  function returns CF_ACCEPT */
  480. /*
  481.  * TCP options.
  482.  */
  483. #define TCP_NODELAY     0x0001
  484.  
  485. /*
  486.  * Address families.
  487.  */
  488. #define AF_UNSPEC       0               /* unspecified */
  489. /*
  490.  * Although  AF_UNSPEC  is  defined for backwards compatibility, using
  491.  * AF_UNSPEC for the "af" parameter when creating a socket is STRONGLY
  492.  * DISCOURAGED.    The  interpretation  of  the  "protocol"  parameter
  493.  * depends  on the actual address family chosen.  As environments grow
  494.  * to  include  more  and  more  address families that use overlapping
  495.  * protocol  values  there  is  more  and  more  chance of choosing an
  496.  * undesired address family when AF_UNSPEC is used.
  497.  */
  498. #define AF_UNIX         1               /* local to host (pipes, portals) */
  499. #define AF_INET         2               /* internetwork: UDP, TCP, etc. */
  500. #define AF_IMPLINK      3               /* arpanet imp addresses */
  501. #define AF_PUP          4               /* pup protocols: e.g. BSP */
  502. #define AF_CHAOS        5               /* mit CHAOS protocols */
  503. #define AF_NS           6               /* XEROX NS protocols */
  504. #define AF_IPX          AF_NS           /* IPX protocols: IPX, SPX, etc. */
  505. #define AF_ISO          7               /* ISO protocols */
  506. #define AF_OSI          AF_ISO          /* OSI is ISO */
  507. #define AF_ECMA         8               /* european computer manufacturers */
  508. #define AF_DATAKIT      9               /* datakit protocols */
  509. #define AF_CCITT        10              /* CCITT protocols, X.25 etc */
  510. #define AF_SNA          11              /* IBM SNA */
  511. #define AF_DECnet       12              /* DECnet */
  512. #define AF_DLI          13              /* Direct data link interface */
  513. #define AF_LAT          14              /* LAT */
  514. #define AF_HYLINK       15              /* NSC Hyperchannel */
  515. #define AF_APPLETALK    16              /* AppleTalk */
  516. #define AF_NETBIOS      17              /* NetBios-style addresses */
  517. #define AF_VOICEVIEW    18              /* VoiceView */
  518. #define AF_FIREFOX      19              /* Protocols from Firefox */
  519. #define AF_UNKNOWN1     20              /* Somebody is using this! */
  520. #define AF_BAN          21              /* Banyan */
  521. #define AF_ATM          22              /* Native ATM Services */
  522. #define AF_INET6        23              /* Internetwork Version 6 */
  523. #define AF_CLUSTER      24              /* Microsoft Wolfpack */
  524. #define AF_12844        25              /* IEEE 1284.4 WG AF */
  525. #define AF_IRDA         26              /* IrDA */
  526. #define AF_NETDES       28              /* Network Designers OSI & gateway
  527.                                            enabled protocols */
  528.  
  529.  
  530. #define AF_MAX          29
  531.  
  532. /*
  533.  * Structure used by kernel to store most
  534.  * addresses.
  535.  */
  536. struct sockaddr {
  537.         u_short sa_family;              /* address family */
  538.         char    sa_data[14];            /* up to 14 bytes of direct address */
  539. };
  540.  
  541. /*
  542.  * Structure used by kernel to pass protocol
  543.  * information in raw sockets.
  544.  */
  545. struct sockproto {
  546.         u_short sp_family;              /* address family */
  547.         u_short sp_protocol;            /* protocol */
  548. };
  549.  
  550. /*
  551.  * Protocol families, same as address families for now.
  552.  */
  553. #define PF_UNSPEC       AF_UNSPEC
  554. #define PF_UNIX         AF_UNIX
  555. #define PF_INET         AF_INET
  556. #define PF_IMPLINK      AF_IMPLINK
  557. #define PF_PUP          AF_PUP
  558. #define PF_CHAOS        AF_CHAOS
  559. #define PF_NS           AF_NS
  560. #define PF_IPX          AF_IPX
  561. #define PF_ISO          AF_ISO
  562. #define PF_OSI          AF_OSI
  563. #define PF_ECMA         AF_ECMA
  564. #define PF_DATAKIT      AF_DATAKIT
  565. #define PF_CCITT        AF_CCITT
  566. #define PF_SNA          AF_SNA
  567. #define PF_DECnet       AF_DECnet
  568. #define PF_DLI          AF_DLI
  569. #define PF_LAT          AF_LAT
  570. #define PF_HYLINK       AF_HYLINK
  571. #define PF_APPLETALK    AF_APPLETALK
  572. #define PF_VOICEVIEW    AF_VOICEVIEW
  573. #define PF_FIREFOX      AF_FIREFOX
  574. #define PF_UNKNOWN1     AF_UNKNOWN1
  575. #define PF_BAN          AF_BAN
  576. #define PF_ATM          AF_ATM
  577. #define PF_INET6        AF_INET6
  578.  
  579. #define PF_MAX          AF_MAX
  580.  
  581. /*
  582.  * Structure used for manipulating linger option.
  583.  */
  584. struct  linger {
  585.         u_short l_onoff;                /* option on/off */
  586.         u_short l_linger;               /* linger time */
  587. };
  588.  
  589. /*
  590.  * Level number for (get/set)sockopt() to apply to socket itself.
  591.  */
  592. #define SOL_SOCKET      0xffff          /* options for socket level */
  593.  
  594. /*
  595.  * Maximum queue length specifiable by listen.
  596.  */
  597. #define SOMAXCONN       0x7fffffff
  598.  
  599. #define MSG_OOB         0x1             /* process out-of-band data */
  600. #define MSG_PEEK        0x2             /* peek at incoming message */
  601. #define MSG_DONTROUTE   0x4             /* send without using routing tables */
  602.  
  603. #define MSG_PARTIAL     0x8000          /* partial send or recv for message xport */
  604.  
  605. /*
  606.  * WinSock 2 extension -- new flags for WSASend(), WSASendTo(), WSARecv() and
  607.  *                          WSARecvFrom()
  608.  */
  609. #define MSG_INTERRUPT   0x10            /* send/recv in the interrupt context */
  610.  
  611. #define MSG_MAXIOVLEN   16
  612.  
  613. /*
  614.  * Define constant based on rfc883, used by gethostbyxxxx() calls.
  615.  */
  616. #define MAXGETHOSTSTRUCT        1024
  617.  
  618. /*
  619.  * WinSock 2 extension -- bit values and indices for FD_XXX network events
  620.  */
  621. #define FD_READ_BIT      0
  622. #define FD_READ          (1 << FD_READ_BIT)
  623.  
  624. #define FD_WRITE_BIT     1
  625. #define FD_WRITE         (1 << FD_WRITE_BIT)
  626.  
  627. #define FD_OOB_BIT       2
  628. #define FD_OOB           (1 << FD_OOB_BIT)
  629.  
  630. #define FD_ACCEPT_BIT    3
  631. #define FD_ACCEPT        (1 << FD_ACCEPT_BIT)
  632.  
  633. #define FD_CONNECT_BIT   4
  634. #define FD_CONNECT       (1 << FD_CONNECT_BIT)
  635.  
  636. #define FD_CLOSE_BIT     5
  637. #define FD_CLOSE         (1 << FD_CLOSE_BIT)
  638.  
  639. #define FD_QOS_BIT       6
  640. #define FD_QOS           (1 << FD_QOS_BIT)
  641.  
  642. #define FD_GROUP_QOS_BIT 7
  643. #define FD_GROUP_QOS     (1 << FD_GROUP_QOS_BIT)
  644.  
  645. #define FD_ROUTING_INTERFACE_CHANGE_BIT 8
  646. #define FD_ROUTING_INTERFACE_CHANGE     (1 << FD_ROUTING_INTERFACE_CHANGE_BIT)
  647.  
  648. #define FD_ADDRESS_LIST_CHANGE_BIT 9
  649. #define FD_ADDRESS_LIST_CHANGE     (1 << FD_ADDRESS_LIST_CHANGE_BIT)
  650.  
  651. #define FD_MAX_EVENTS    10
  652. #define FD_ALL_EVENTS    ((1 << FD_MAX_EVENTS) - 1)
  653.  
  654.  
  655. /*
  656.  * WinSock error codes are also defined in winerror.h
  657.  * Hence the IFDEF.
  658.  */
  659. #ifndef WSABASEERR
  660.  
  661. /*
  662.  * All Windows Sockets error constants are biased by WSABASEERR from
  663.  * the "normal"
  664.  */
  665. #define WSABASEERR              10000
  666.  
  667. /*
  668.  * Windows Sockets definitions of regular Microsoft C error constants
  669.  */
  670. #define WSAEINTR                (WSABASEERR+4)
  671. #define WSAEBADF                (WSABASEERR+9)
  672. #define WSAEACCES               (WSABASEERR+13)
  673. #define WSAEFAULT               (WSABASEERR+14)
  674. #define WSAEINVAL               (WSABASEERR+22)
  675. #define WSAEMFILE               (WSABASEERR+24)
  676.  
  677. /*
  678.  * Windows Sockets definitions of regular Berkeley error constants
  679.  */
  680. #define WSAEWOULDBLOCK          (WSABASEERR+35)
  681. #define WSAEINPROGRESS          (WSABASEERR+36)
  682. #define WSAEALREADY             (WSABASEERR+37)
  683. #define WSAENOTSOCK             (WSABASEERR+38)
  684. #define WSAEDESTADDRREQ         (WSABASEERR+39)
  685. #define WSAEMSGSIZE             (WSABASEERR+40)
  686. #define WSAEPROTOTYPE           (WSABASEERR+41)
  687. #define WSAENOPROTOOPT          (WSABASEERR+42)
  688. #define WSAEPROTONOSUPPORT      (WSABASEERR+43)
  689. #define WSAESOCKTNOSUPPORT      (WSABASEERR+44)
  690. #define WSAEOPNOTSUPP           (WSABASEERR+45)
  691. #define WSAEPFNOSUPPORT         (WSABASEERR+46)
  692. #define WSAEAFNOSUPPORT         (WSABASEERR+47)
  693. #define WSAEADDRINUSE           (WSABASEERR+48)
  694. #define WSAEADDRNOTAVAIL        (WSABASEERR+49)
  695. #define WSAENETDOWN             (WSABASEERR+50)
  696. #define WSAENETUNREACH          (WSABASEERR+51)
  697. #define WSAENETRESET            (WSABASEERR+52)
  698. #define WSAECONNABORTED         (WSABASEERR+53)
  699. #define WSAECONNRESET           (WSABASEERR+54)
  700. #define WSAENOBUFS              (WSABASEERR+55)
  701. #define WSAEISCONN              (WSABASEERR+56)
  702. #define WSAENOTCONN             (WSABASEERR+57)
  703. #define WSAESHUTDOWN            (WSABASEERR+58)
  704. #define WSAETOOMANYREFS         (WSABASEERR+59)
  705. #define WSAETIMEDOUT            (WSABASEERR+60)
  706. #define WSAECONNREFUSED         (WSABASEERR+61)
  707. #define WSAELOOP                (WSABASEERR+62)
  708. #define WSAENAMETOOLONG         (WSABASEERR+63)
  709. #define WSAEHOSTDOWN            (WSABASEERR+64)
  710. #define WSAEHOSTUNREACH         (WSABASEERR+65)
  711. #define WSAENOTEMPTY            (WSABASEERR+66)
  712. #define WSAEPROCLIM             (WSABASEERR+67)
  713. #define WSAEUSERS               (WSABASEERR+68)
  714. #define WSAEDQUOT               (WSABASEERR+69)
  715. #define WSAESTALE               (WSABASEERR+70)
  716. #define WSAEREMOTE              (WSABASEERR+71)
  717.  
  718. /*
  719.  * Extended Windows Sockets error constant definitions
  720.  */
  721. #define WSASYSNOTREADY          (WSABASEERR+91)
  722. #define WSAVERNOTSUPPORTED      (WSABASEERR+92)
  723. #define WSANOTINITIALISED       (WSABASEERR+93)
  724. #define WSAEDISCON              (WSABASEERR+101)
  725. #define WSAENOMORE              (WSABASEERR+102)
  726. #define WSAECANCELLED           (WSABASEERR+103)
  727. #define WSAEINVALIDPROCTABLE    (WSABASEERR+104)
  728. #define WSAEINVALIDPROVIDER     (WSABASEERR+105)
  729. #define WSAEPROVIDERFAILEDINIT  (WSABASEERR+106)
  730. #define WSASYSCALLFAILURE       (WSABASEERR+107)
  731. #define WSASERVICE_NOT_FOUND    (WSABASEERR+108)
  732. #define WSATYPE_NOT_FOUND       (WSABASEERR+109)
  733. #define WSA_E_NO_MORE           (WSABASEERR+110)
  734. #define WSA_E_CANCELLED         (WSABASEERR+111)
  735. #define WSAEREFUSED             (WSABASEERR+112)
  736.  
  737. /*
  738.  * Error return codes from gethostbyname() and gethostbyaddr()
  739.  * (when using the resolver). Note that these errors are
  740.  * retrieved via WSAGetLastError() and must therefore follow
  741.  * the rules for avoiding clashes with error numbers from
  742.  * specific implementations or language run-time systems.
  743.  * For this reason the codes are based at WSABASEERR+1001.
  744.  * Note also that [WSA]NO_ADDRESS is defined only for
  745.  * compatibility purposes.
  746.  */
  747.  
  748. /* Authoritative Answer: Host not found */
  749. #define WSAHOST_NOT_FOUND       (WSABASEERR+1001)
  750.  
  751. /* Non-Authoritative: Host not found, or SERVERFAIL */
  752. #define WSATRY_AGAIN            (WSABASEERR+1002)
  753.  
  754. /* Non-recoverable errors, FORMERR, REFUSED, NOTIMP */
  755. #define WSANO_RECOVERY          (WSABASEERR+1003)
  756.  
  757. /* Valid name, no data record of requested type */
  758. #define WSANO_DATA              (WSABASEERR+1004)
  759.  
  760. /*
  761.  * Define QOS related error return codes
  762.  *
  763.  */
  764. #define  WSA_QOS_RECEIVERS               (WSABASEERR + 1005)
  765.          /* at least one Reserve has arrived */
  766. #define  WSA_QOS_SENDERS                 (WSABASEERR + 1006)
  767.          /* at least one Path has arrived */
  768. #define  WSA_QOS_NO_SENDERS              (WSABASEERR + 1007)
  769.          /* there are no senders */
  770. #define  WSA_QOS_NO_RECEIVERS            (WSABASEERR + 1008)
  771.          /* there are no receivers */
  772. #define  WSA_QOS_REQUEST_CONFIRMED       (WSABASEERR + 1009)
  773.          /* Reserve has been confirmed */
  774. #define  WSA_QOS_ADMISSION_FAILURE       (WSABASEERR + 1010)
  775.          /* error due to lack of resources */
  776. #define  WSA_QOS_POLICY_FAILURE          (WSABASEERR + 1011)
  777.          /* rejected for administrative reasons - bad credentials */
  778. #define  WSA_QOS_BAD_STYLE               (WSABASEERR + 1012)
  779.          /* unknown or conflicting style */
  780. #define  WSA_QOS_BAD_OBJECT              (WSABASEERR + 1013)
  781.          /* problem with some part of the filterspec or providerspecific
  782.           * buffer in general */
  783. #define  WSA_QOS_TRAFFIC_CTRL_ERROR      (WSABASEERR + 1014)
  784.          /* problem with some part of the flowspec */
  785. #define  WSA_QOS_GENERIC_ERROR           (WSABASEERR + 1015)
  786.          /* general error */
  787. #define  WSA_QOS_ESERVICETYPE            (WSABASEERR + 1016)
  788.          /* invalid service type in flowspec */
  789. #define  WSA_QOS_EFLOWSPEC               (WSABASEERR + 1017)
  790.          /* invalid flowspec */
  791. #define  WSA_QOS_EPROVSPECBUF            (WSABASEERR + 1018)
  792.          /* invalid provider specific buffer */
  793. #define  WSA_QOS_EFILTERSTYLE            (WSABASEERR + 1019)
  794.          /* invalid filter style */
  795. #define  WSA_QOS_EFILTERTYPE             (WSABASEERR + 1020)
  796.          /* invalid filter type */
  797. #define  WSA_QOS_EFILTERCOUNT            (WSABASEERR + 1021)
  798.          /* incorrect number of filters */
  799. #define  WSA_QOS_EOBJLENGTH              (WSABASEERR + 1022)
  800.          /* invalid object length */
  801. #define  WSA_QOS_EFLOWCOUNT              (WSABASEERR + 1023)
  802.          /* incorrect number of flows */
  803. #define  WSA_QOS_EUNKOWNPSOBJ            (WSABASEERR + 1024)
  804.          /* unknown object in provider specific buffer */
  805. #define  WSA_QOS_EPOLICYOBJ              (WSABASEERR + 1025)
  806.          /* invalid policy object in provider specific buffer */
  807. #define  WSA_QOS_EFLOWDESC               (WSABASEERR + 1026)
  808.          /* invalid flow descriptor in the list */
  809. #define  WSA_QOS_EPSFLOWSPEC             (WSABASEERR + 1027)
  810.          /* inconsistent flow spec in provider specific buffer */
  811. #define  WSA_QOS_EPSFILTERSPEC           (WSABASEERR + 1028)
  812.          /* invalid filter spec in provider specific buffer */
  813. #define  WSA_QOS_ESDMODEOBJ              (WSABASEERR + 1029)
  814.          /* invalid shape discard mode object in provider specific buffer */
  815. #define  WSA_QOS_ESHAPERATEOBJ           (WSABASEERR + 1030)
  816.          /* invalid shaping rate object in provider specific buffer */
  817. #define  WSA_QOS_RESERVED_PETYPE         (WSABASEERR + 1031)
  818.          /* reserved policy element in provider specific buffer */
  819.  
  820.  
  821.  
  822. /*
  823.  * WinSock error codes are also defined in winerror.h
  824.  * Hence the IFDEF.
  825.  */
  826. #endif /* ifdef WSABASEERR */
  827.  
  828. /*
  829.  * Compatibility macros.
  830.  */
  831.  
  832. #define h_errno         WSAGetLastError()
  833. #define HOST_NOT_FOUND          WSAHOST_NOT_FOUND
  834. #define TRY_AGAIN               WSATRY_AGAIN
  835. #define NO_RECOVERY             WSANO_RECOVERY
  836. #define NO_DATA                 WSANO_DATA
  837. /* no address, look for MX record */
  838. #define WSANO_ADDRESS           WSANO_DATA
  839. #define NO_ADDRESS              WSANO_ADDRESS
  840.  
  841.  
  842.  
  843. /*
  844.  * Windows Sockets errors redefined as regular Berkeley error constants.
  845.  * These are commented out in Windows NT to avoid conflicts with errno.h.
  846.  * Use the WSA constants instead.
  847.  */
  848. #if 0
  849. #define EWOULDBLOCK             WSAEWOULDBLOCK
  850. #define EINPROGRESS             WSAEINPROGRESS
  851. #define EALREADY                WSAEALREADY
  852. #define ENOTSOCK                WSAENOTSOCK
  853. #define EDESTADDRREQ            WSAEDESTADDRREQ
  854. #define EMSGSIZE                WSAEMSGSIZE
  855. #define EPROTOTYPE              WSAEPROTOTYPE
  856. #define ENOPROTOOPT             WSAENOPROTOOPT
  857. #define EPROTONOSUPPORT         WSAEPROTONOSUPPORT
  858. #define ESOCKTNOSUPPORT         WSAESOCKTNOSUPPORT
  859. #define EOPNOTSUPP              WSAEOPNOTSUPP
  860. #define EPFNOSUPPORT            WSAEPFNOSUPPORT
  861. #define EAFNOSUPPORT            WSAEAFNOSUPPORT
  862. #define EADDRINUSE              WSAEADDRINUSE
  863. #define EADDRNOTAVAIL           WSAEADDRNOTAVAIL
  864. #define ENETDOWN                WSAENETDOWN
  865. #define ENETUNREACH             WSAENETUNREACH
  866. #define ENETRESET               WSAENETRESET
  867. #define ECONNABORTED            WSAECONNABORTED
  868. #define ECONNRESET              WSAECONNRESET
  869. #define ENOBUFS                 WSAENOBUFS
  870. #define EISCONN                 WSAEISCONN
  871. #define ENOTCONN                WSAENOTCONN
  872. #define ESHUTDOWN               WSAESHUTDOWN
  873. #define ETOOMANYREFS            WSAETOOMANYREFS
  874. #define ETIMEDOUT               WSAETIMEDOUT
  875. #define ECONNREFUSED            WSAECONNREFUSED
  876. #define ELOOP                   WSAELOOP
  877. #define ENAMETOOLONG            WSAENAMETOOLONG
  878. #define EHOSTDOWN               WSAEHOSTDOWN
  879. #define EHOSTUNREACH            WSAEHOSTUNREACH
  880. #define ENOTEMPTY               WSAENOTEMPTY
  881. #define EPROCLIM                WSAEPROCLIM
  882. #define EUSERS                  WSAEUSERS
  883. #define EDQUOT                  WSAEDQUOT
  884. #define ESTALE                  WSAESTALE
  885. #define EREMOTE                 WSAEREMOTE
  886. #endif
  887.  
  888. /*
  889.  * WinSock 2 extension -- new error codes and type definition
  890.  */
  891.  
  892. #ifdef WIN32
  893.  
  894. #define WSAAPI                  FAR PASCAL
  895. #define WSAEVENT                HANDLE
  896. #define LPWSAEVENT              LPHANDLE
  897. #define WSAOVERLAPPED           OVERLAPPED
  898. typedef struct _OVERLAPPED *    LPWSAOVERLAPPED;
  899.  
  900. #define WSA_IO_PENDING          (ERROR_IO_PENDING)
  901. #define WSA_IO_INCOMPLETE       (ERROR_IO_INCOMPLETE)
  902. #define WSA_INVALID_HANDLE      (ERROR_INVALID_HANDLE)
  903. #define WSA_INVALID_PARAMETER   (ERROR_INVALID_PARAMETER)
  904. #define WSA_NOT_ENOUGH_MEMORY   (ERROR_NOT_ENOUGH_MEMORY)
  905. #define WSA_OPERATION_ABORTED   (ERROR_OPERATION_ABORTED)
  906.  
  907. #define WSA_INVALID_EVENT       ((WSAEVENT)NULL)
  908. #define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS)
  909. #define WSA_WAIT_FAILED         (WAIT_FAILED)
  910. #define WSA_WAIT_EVENT_0        (WAIT_OBJECT_0)
  911. #define WSA_WAIT_IO_COMPLETION  (WAIT_IO_COMPLETION)
  912. #define WSA_WAIT_TIMEOUT        (WAIT_TIMEOUT)
  913. #define WSA_INFINITE            (INFINITE)
  914.  
  915. #else /* WIN16 */
  916.  
  917. #define WSAAPI                  FAR PASCAL
  918. typedef DWORD                   WSAEVENT, FAR * LPWSAEVENT;
  919.  
  920. typedef struct _WSAOVERLAPPED {
  921.     DWORD    Internal;
  922.     DWORD    InternalHigh;
  923.     DWORD    Offset;
  924.     DWORD    OffsetHigh;
  925.     WSAEVENT hEvent;
  926. } WSAOVERLAPPED, FAR * LPWSAOVERLAPPED;
  927.  
  928. #define WSA_IO_PENDING          (WSAEWOULDBLOCK)
  929. #define WSA_IO_INCOMPLETE       (WSAEWOULDBLOCK)
  930. #define WSA_INVALID_HANDLE      (WSAENOTSOCK)
  931. #define WSA_INVALID_PARAMETER   (WSAEINVAL)
  932. #define WSA_NOT_ENOUGH_MEMORY   (WSAENOBUFS)
  933. #define WSA_OPERATION_ABORTED   (WSAEINTR)
  934.  
  935. #define WSA_INVALID_EVENT       ((WSAEVENT)NULL)
  936. #define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS)
  937. #define WSA_WAIT_FAILED         ((DWORD)-1L)
  938. #define WSA_WAIT_EVENT_0        ((DWORD)0)
  939. #define WSA_WAIT_TIMEOUT        ((DWORD)0x102L)
  940. #define WSA_INFINITE            ((DWORD)-1L)
  941.  
  942. #endif  /* WIN32 */
  943.  
  944. /*
  945.  * WinSock 2 extension -- WSABUF and QOS struct, include qos.h
  946.  * to pull in FLOWSPEC and related definitions
  947.  */
  948.  
  949. typedef struct _WSABUF {
  950.     u_long      len;     /* the length of the buffer */
  951.     char FAR *  buf;     /* the pointer to the buffer */
  952. } WSABUF, FAR * LPWSABUF;
  953.  
  954. #include <qos.h>
  955.  
  956. typedef struct _QualityOfService
  957. {
  958.     FLOWSPEC      SendingFlowspec;       /* the flow spec for data sending */
  959.     FLOWSPEC      ReceivingFlowspec;     /* the flow spec for data receiving */
  960.     WSABUF        ProviderSpecific;      /* additional provider specific stuff */
  961. } QOS, FAR * LPQOS;
  962.  
  963. /*
  964.  * WinSock 2 extension -- manifest constants for return values of the condition function
  965.  */
  966. #define CF_ACCEPT       0x0000
  967. #define CF_REJECT       0x0001
  968. #define CF_DEFER        0x0002
  969.  
  970. /*
  971.  * WinSock 2 extension -- manifest constants for shutdown()
  972.  */
  973. #define SD_RECEIVE      0x00
  974. #define SD_SEND         0x01
  975. #define SD_BOTH         0x02
  976.  
  977. /*
  978.  * WinSock 2 extension -- data type and manifest constants for socket groups
  979.  */
  980. typedef unsigned int             GROUP;
  981.  
  982. #define SG_UNCONSTRAINED_GROUP   0x01
  983. #define SG_CONSTRAINED_GROUP     0x02
  984.  
  985. /*
  986.  * WinSock 2 extension -- data type for WSAEnumNetworkEvents()
  987.  */
  988. typedef struct _WSANETWORKEVENTS {
  989.        long lNetworkEvents;
  990.        int iErrorCode[FD_MAX_EVENTS];
  991. } WSANETWORKEVENTS, FAR * LPWSANETWORKEVENTS;
  992.  
  993. /*
  994.  * WinSock 2 extension -- WSAPROTOCOL_INFO structure and associated
  995.  * manifest constants
  996.  */
  997.  
  998. #ifndef GUID_DEFINED
  999. #include <guiddef.h>
  1000. #endif /* GUID_DEFINED */
  1001.  
  1002. #define MAX_PROTOCOL_CHAIN 7
  1003.  
  1004. #define BASE_PROTOCOL      1
  1005. #define LAYERED_PROTOCOL   0
  1006.  
  1007. typedef struct _WSAPROTOCOLCHAIN {
  1008.     int ChainLen;                                 /* the length of the chain,     */
  1009.                                                   /* length = 0 means layered protocol, */
  1010.                                                   /* length = 1 means base protocol, */
  1011.                                                   /* length > 1 means protocol chain */
  1012.     DWORD ChainEntries[MAX_PROTOCOL_CHAIN];       /* a list of dwCatalogEntryIds */
  1013. } WSAPROTOCOLCHAIN, FAR * LPWSAPROTOCOLCHAIN;
  1014.  
  1015. #define WSAPROTOCOL_LEN  255
  1016.  
  1017. typedef struct _WSAPROTOCOL_INFOA {
  1018.     DWORD dwServiceFlags1;
  1019.     DWORD dwServiceFlags2;
  1020.     DWORD dwServiceFlags3;
  1021.     DWORD dwServiceFlags4;
  1022.     DWORD dwProviderFlags;
  1023.     GUID ProviderId;
  1024.     DWORD dwCatalogEntryId;
  1025.     WSAPROTOCOLCHAIN ProtocolChain;
  1026.     int iVersion;
  1027.     int iAddressFamily;
  1028.     int iMaxSockAddr;
  1029.     int iMinSockAddr;
  1030.     int iSocketType;
  1031.     int iProtocol;
  1032.     int iProtocolMaxOffset;
  1033.     int iNetworkByteOrder;
  1034.     int iSecurityScheme;
  1035.     DWORD dwMessageSize;
  1036.     DWORD dwProviderReserved;
  1037.     CHAR   szProtocol[WSAPROTOCOL_LEN+1];
  1038. } WSAPROTOCOL_INFOA, FAR * LPWSAPROTOCOL_INFOA;
  1039. typedef struct _WSAPROTOCOL_INFOW {
  1040.     DWORD dwServiceFlags1;
  1041.     DWORD dwServiceFlags2;
  1042.     DWORD dwServiceFlags3;
  1043.     DWORD dwServiceFlags4;
  1044.     DWORD dwProviderFlags;
  1045.     GUID ProviderId;
  1046.     DWORD dwCatalogEntryId;
  1047.     WSAPROTOCOLCHAIN ProtocolChain;
  1048.     int iVersion;
  1049.     int iAddressFamily;
  1050.     int iMaxSockAddr;
  1051.     int iMinSockAddr;
  1052.     int iSocketType;
  1053.     int iProtocol;
  1054.     int iProtocolMaxOffset;
  1055.     int iNetworkByteOrder;
  1056.     int iSecurityScheme;
  1057.     DWORD dwMessageSize;
  1058.     DWORD dwProviderReserved;
  1059.     WCHAR  szProtocol[WSAPROTOCOL_LEN+1];
  1060. } WSAPROTOCOL_INFOW, FAR * LPWSAPROTOCOL_INFOW;
  1061. #ifdef UNICODE
  1062. typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO;
  1063. typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO;
  1064. #else
  1065. typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO;
  1066. typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO;
  1067. #endif // UNICODE
  1068.  
  1069. /* Flag bit definitions for dwProviderFlags */
  1070. #define PFL_MULTIPLE_PROTO_ENTRIES          0x00000001
  1071. #define PFL_RECOMMENDED_PROTO_ENTRY         0x00000002
  1072. #define PFL_HIDDEN                          0x00000004
  1073. #define PFL_MATCHES_PROTOCOL_ZERO           0x00000008
  1074.  
  1075. /* Flag bit definitions for dwServiceFlags1 */
  1076. #define XP1_CONNECTIONLESS                  0x00000001
  1077. #define XP1_GUARANTEED_DELIVERY             0x00000002
  1078. #define XP1_GUARANTEED_ORDER                0x00000004
  1079. #define XP1_MESSAGE_ORIENTED                0x00000008
  1080. #define XP1_PSEUDO_STREAM                   0x00000010
  1081. #define XP1_GRACEFUL_CLOSE                  0x00000020
  1082. #define XP1_EXPEDITED_DATA                  0x00000040
  1083. #define XP1_CONNECT_DATA                    0x00000080
  1084. #define XP1_DISCONNECT_DATA                 0x00000100
  1085. #define XP1_SUPPORT_BROADCAST               0x00000200
  1086. #define XP1_SUPPORT_MULTIPOINT              0x00000400
  1087. #define XP1_MULTIPOINT_CONTROL_PLANE        0x00000800
  1088. #define XP1_MULTIPOINT_DATA_PLANE           0x00001000
  1089. #define XP1_QOS_SUPPORTED                   0x00002000
  1090. #define XP1_INTERRUPT                       0x00004000
  1091. #define XP1_UNI_SEND                        0x00008000
  1092. #define XP1_UNI_RECV                        0x00010000
  1093. #define XP1_IFS_HANDLES                     0x00020000
  1094. #define XP1_PARTIAL_MESSAGE                 0x00040000
  1095.  
  1096. #define BIGENDIAN                           0x0000
  1097. #define LITTLEENDIAN                        0x0001
  1098.  
  1099. #define SECURITY_PROTOCOL_NONE              0x0000
  1100.  
  1101. /*
  1102.  * WinSock 2 extension -- manifest constants for WSAJoinLeaf()
  1103.  */
  1104. #define JL_SENDER_ONLY    0x01
  1105. #define JL_RECEIVER_ONLY  0x02
  1106. #define JL_BOTH           0x04
  1107.  
  1108. /*
  1109.  * WinSock 2 extension -- manifest constants for WSASocket()
  1110.  */
  1111. #define WSA_FLAG_OVERLAPPED           0x01
  1112. #define WSA_FLAG_MULTIPOINT_C_ROOT    0x02
  1113. #define WSA_FLAG_MULTIPOINT_C_LEAF    0x04
  1114. #define WSA_FLAG_MULTIPOINT_D_ROOT    0x08
  1115. #define WSA_FLAG_MULTIPOINT_D_LEAF    0x10
  1116.  
  1117. /*
  1118.  * WinSock 2 extension -- manifest constants for WSAIoctl()
  1119.  */
  1120. #define IOC_UNIX                      0x00000000
  1121. #define IOC_WS2                       0x08000000
  1122. #define IOC_PROTOCOL                  0x10000000
  1123. #define IOC_VENDOR                    0x18000000
  1124.  
  1125. #define _WSAIO(x,y)                   (IOC_VOID|(x)|(y))
  1126. #define _WSAIOR(x,y)                  (IOC_OUT|(x)|(y))
  1127. #define _WSAIOW(x,y)                  (IOC_IN|(x)|(y))
  1128. #define _WSAIORW(x,y)                 (IOC_INOUT|(x)|(y))
  1129.  
  1130. #define SIO_ASSOCIATE_HANDLE          _WSAIOW(IOC_WS2,1)
  1131. #define SIO_ENABLE_CIRCULAR_QUEUEING  _WSAIO(IOC_WS2,2)
  1132. #define SIO_FIND_ROUTE                _WSAIOR(IOC_WS2,3)
  1133. #define SIO_FLUSH                     _WSAIO(IOC_WS2,4)
  1134. #define SIO_GET_BROADCAST_ADDRESS     _WSAIOR(IOC_WS2,5)
  1135. #define SIO_GET_EXTENSION_FUNCTION_POINTER  _WSAIORW(IOC_WS2,6)
  1136. #define SIO_GET_QOS                   _WSAIORW(IOC_WS2,7)
  1137. #define SIO_GET_GROUP_QOS             _WSAIORW(IOC_WS2,8)
  1138. #define SIO_MULTIPOINT_LOOPBACK       _WSAIOW(IOC_WS2,9)
  1139. #define SIO_MULTICAST_SCOPE           _WSAIOW(IOC_WS2,10)
  1140. #define SIO_SET_QOS                   _WSAIOW(IOC_WS2,11)
  1141. #define SIO_SET_GROUP_QOS             _WSAIOW(IOC_WS2,12)
  1142. #define SIO_TRANSLATE_HANDLE          _WSAIORW(IOC_WS2,13)
  1143. #define SIO_ROUTING_INTERFACE_QUERY   _WSAIORW(IOC_WS2,20)
  1144. #define SIO_ROUTING_INTERFACE_CHANGE  _WSAIOW(IOC_WS2,21)
  1145. #define SIO_ADDRESS_LIST_QUERY        _WSAIOR(IOC_WS2,22)
  1146. #define SIO_ADDRESS_LIST_CHANGE       _WSAIO(IOC_WS2,23)
  1147. #define SIO_QUERY_TARGET_PNP_HANDLE   _WSAIOR(IOC_WS2,24)
  1148.  
  1149. /*
  1150.  * WinSock 2 extension -- manifest constants for SIO_TRANSLATE_HANDLE ioctl
  1151.  */
  1152. #define TH_NETDEV        0x00000001
  1153. #define TH_TAPI          0x00000002
  1154.  
  1155.  
  1156. /*
  1157.  * Microsoft Windows Extended data types required for the functions to
  1158.  * convert   back  and  forth  between  binary  and  string  forms  of
  1159.  * addresses.
  1160.  */
  1161. typedef struct sockaddr SOCKADDR;
  1162. typedef struct sockaddr *PSOCKADDR;
  1163. typedef struct sockaddr FAR *LPSOCKADDR;
  1164.  
  1165. /*
  1166.  * Manifest constants and type definitions related to name resolution and
  1167.  * registration (RNR) API
  1168.  */
  1169.  
  1170. #ifndef _tagBLOB_DEFINED
  1171. #define _tagBLOB_DEFINED
  1172. #define _BLOB_DEFINED
  1173. #define _LPBLOB_DEFINED
  1174. typedef struct _BLOB {
  1175.     ULONG cbSize ;
  1176. #ifdef MIDL_PASS
  1177.     [size_is(cbSize)] BYTE *pBlobData;
  1178. #else  /* MIDL_PASS */
  1179.     BYTE *pBlobData ;
  1180. #endif /* MIDL_PASS */
  1181. } BLOB, *LPBLOB ;
  1182. #endif
  1183.  
  1184. /*
  1185.  * Service Install Flags
  1186.  */
  1187.  
  1188. #define SERVICE_MULTIPLE       (0x00000001)
  1189.  
  1190. /*
  1191.  *& Name Spaces
  1192.  */
  1193.  
  1194. #define NS_ALL                      (0)
  1195.  
  1196. #define NS_SAP                      (1)
  1197. #define NS_NDS                      (2)
  1198. #define NS_PEER_BROWSE              (3)
  1199. #define NS_SLP                      (5)
  1200. #define NS_DHCP                     (6)
  1201.  
  1202. #define NS_TCPIP_LOCAL              (10)
  1203. #define NS_TCPIP_HOSTS              (11)
  1204. #define NS_DNS                      (12)
  1205. #define NS_NETBT                    (13)
  1206. #define NS_WINS                     (14)
  1207.  
  1208. #define NS_NBP                      (20)
  1209.  
  1210. #define NS_MS                       (30)
  1211. #define NS_STDA                     (31)
  1212. #define NS_NTDS                     (32)
  1213.  
  1214. #define NS_X500                     (40)
  1215. #define NS_NIS                      (41)
  1216. #define NS_NISPLUS                  (42)
  1217.  
  1218. #define NS_WRQ                      (50)
  1219.  
  1220. #define NS_NETDES                   (60)    /* Network Designers Limited */
  1221.  
  1222.  
  1223. /*
  1224.  * Resolution flags for WSAGetAddressByName().
  1225.  * Note these are also used by the 1.1 API GetAddressByName, so
  1226.  * leave them around.
  1227.  */
  1228. #define RES_UNUSED_1                (0x00000001)
  1229. #define RES_FLUSH_CACHE             (0x00000002)
  1230. #ifndef RES_SERVICE
  1231. #define RES_SERVICE                 (0x00000004)
  1232. #endif /* RES_SERVICE */
  1233.  
  1234. /*
  1235.  * Well known value names for Service Types
  1236.  */
  1237.  
  1238. #define SERVICE_TYPE_VALUE_IPXPORTA      "IpxSocket"
  1239. #define SERVICE_TYPE_VALUE_IPXPORTW     L"IpxSocket"
  1240. #define SERVICE_TYPE_VALUE_SAPIDA        "SapId"
  1241. #define SERVICE_TYPE_VALUE_SAPIDW       L"SapId"
  1242.  
  1243. #define SERVICE_TYPE_VALUE_TCPPORTA      "TcpPort"
  1244. #define SERVICE_TYPE_VALUE_TCPPORTW     L"TcpPort"
  1245.  
  1246. #define SERVICE_TYPE_VALUE_UDPPORTA      "UdpPort"
  1247. #define SERVICE_TYPE_VALUE_UDPPORTW     L"UdpPort"
  1248.  
  1249. #define SERVICE_TYPE_VALUE_OBJECTIDA     "ObjectId"
  1250. #define SERVICE_TYPE_VALUE_OBJECTIDW    L"ObjectId"
  1251.  
  1252. #ifdef UNICODE
  1253.  
  1254. #define SERVICE_TYPE_VALUE_SAPID        SERVICE_TYPE_VALUE_SAPIDW
  1255. #define SERVICE_TYPE_VALUE_TCPPORT      SERVICE_TYPE_VALUE_TCPPORTW
  1256. #define SERVICE_TYPE_VALUE_UDPPORT      SERVICE_TYPE_VALUE_UDPPORTW
  1257. #define SERVICE_TYPE_VALUE_OBJECTID     SERVICE_TYPE_VALUE_OBJECTIDW
  1258.  
  1259. #else /* not UNICODE */
  1260.  
  1261. #define SERVICE_TYPE_VALUE_SAPID        SERVICE_TYPE_VALUE_SAPIDA
  1262. #define SERVICE_TYPE_VALUE_TCPPORT      SERVICE_TYPE_VALUE_TCPPORTA
  1263. #define SERVICE_TYPE_VALUE_UDPPORT      SERVICE_TYPE_VALUE_UDPPORTA
  1264. #define SERVICE_TYPE_VALUE_OBJECTID     SERVICE_TYPE_VALUE_OBJECTIDA
  1265.  
  1266. #endif
  1267.  
  1268. #ifndef __CSADDR_DEFINED__
  1269. #define __CSADDR_DEFINED__
  1270.  
  1271.  
  1272. /*
  1273.  * SockAddr Information
  1274.  */
  1275. typedef struct _SOCKET_ADDRESS {
  1276.     LPSOCKADDR lpSockaddr ;
  1277.     INT iSockaddrLength ;
  1278. } SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR * LPSOCKET_ADDRESS ;
  1279.  
  1280. /*
  1281.  * CSAddr Information
  1282.  */
  1283. typedef struct _CSADDR_INFO {
  1284.     SOCKET_ADDRESS LocalAddr ;
  1285.     SOCKET_ADDRESS RemoteAddr ;
  1286.     INT iSocketType ;
  1287.     INT iProtocol ;
  1288. } CSADDR_INFO, *PCSADDR_INFO, FAR * LPCSADDR_INFO ;
  1289. #endif // __CSADDR_DEFINED__
  1290.  
  1291. /*
  1292.  * Address list returned via SIO_ADDRESS_LIST_QUERY
  1293.  */
  1294. typedef struct _SOCKET_ADDRESS_LIST {
  1295.     INT             iAddressCount;
  1296.     SOCKET_ADDRESS  Address[1];
  1297. } SOCKET_ADDRESS_LIST, FAR * LPSOCKET_ADDRESS_LIST;
  1298.  
  1299. /*
  1300.  *  Address Family/Protocol Tuples
  1301.  */
  1302. typedef struct _AFPROTOCOLS {
  1303.     INT iAddressFamily;
  1304.     INT iProtocol;
  1305. } AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
  1306.  
  1307. /*
  1308.  * Client Query API Typedefs
  1309.  */
  1310.  
  1311. /*
  1312.  * The comparators
  1313.  */
  1314. typedef enum _WSAEcomparator
  1315. {
  1316.     COMP_EQUAL = 0,
  1317.     COMP_NOTLESS
  1318. } WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
  1319.  
  1320. typedef struct _WSAVersion
  1321. {
  1322.     DWORD           dwVersion;
  1323.     WSAECOMPARATOR  ecHow;
  1324. }WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
  1325.  
  1326. typedef struct _WSAQuerySetA
  1327. {
  1328.     DWORD           dwSize;
  1329.     LPSTR           lpszServiceInstanceName;
  1330.     LPGUID          lpServiceClassId;
  1331.     LPWSAVERSION    lpVersion;
  1332.     LPSTR           lpszComment;
  1333.     DWORD           dwNameSpace;
  1334.     LPGUID          lpNSProviderId;
  1335.     LPSTR           lpszContext;
  1336.     DWORD           dwNumberOfProtocols;
  1337.     LPAFPROTOCOLS   lpafpProtocols;
  1338.     LPSTR           lpszQueryString;
  1339.     DWORD           dwNumberOfCsAddrs;
  1340.     LPCSADDR_INFO   lpcsaBuffer;
  1341.     DWORD           dwOutputFlags;
  1342.     LPBLOB          lpBlob;
  1343. } WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
  1344. typedef struct _WSAQuerySetW
  1345. {
  1346.     DWORD           dwSize;
  1347.     LPWSTR          lpszServiceInstanceName;
  1348.     LPGUID          lpServiceClassId;
  1349.     LPWSAVERSION    lpVersion;
  1350.     LPWSTR          lpszComment;
  1351.     DWORD           dwNameSpace;
  1352.     LPGUID          lpNSProviderId;
  1353.     LPWSTR          lpszContext;
  1354.     DWORD           dwNumberOfProtocols;
  1355.     LPAFPROTOCOLS   lpafpProtocols;
  1356.     LPWSTR          lpszQueryString;
  1357.     DWORD           dwNumberOfCsAddrs;
  1358.     LPCSADDR_INFO   lpcsaBuffer;
  1359.     DWORD           dwOutputFlags;
  1360.     LPBLOB          lpBlob;
  1361. } WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
  1362. #ifdef UNICODE
  1363. typedef WSAQUERYSETW WSAQUERYSET;
  1364. typedef PWSAQUERYSETW PWSAQUERYSET;
  1365. typedef LPWSAQUERYSETW LPWSAQUERYSET;
  1366. #else
  1367. typedef WSAQUERYSETA WSAQUERYSET;
  1368. typedef PWSAQUERYSETA PWSAQUERYSET;
  1369. typedef LPWSAQUERYSETA LPWSAQUERYSET;
  1370. #endif // UNICODE
  1371.  
  1372. #define LUP_DEEP                0x0001
  1373. #define LUP_CONTAINERS          0x0002
  1374. #define LUP_NOCONTAINERS        0x0004
  1375. #define LUP_NEAREST             0x0008
  1376. #define LUP_RETURN_NAME         0x0010
  1377. #define LUP_RETURN_TYPE         0x0020
  1378. #define LUP_RETURN_VERSION      0x0040
  1379. #define LUP_RETURN_COMMENT      0x0080
  1380. #define LUP_RETURN_ADDR         0x0100
  1381. #define LUP_RETURN_BLOB         0x0200
  1382. #define LUP_RETURN_ALIASES      0x0400
  1383. #define LUP_RETURN_QUERY_STRING 0x0800
  1384. #define LUP_RETURN_ALL          0x0FF0
  1385. #define LUP_RES_SERVICE         0x8000
  1386.  
  1387. #define LUP_FLUSHCACHE       0x1000
  1388. #define LUP_FLUSHPREVIOUS    0x2000
  1389.  
  1390.  
  1391. //
  1392. // Return flags
  1393. //
  1394.  
  1395. #define RESULT_IS_ALIAS      0x0001
  1396.  
  1397. /*
  1398.  * Service Address Registration and Deregistration Data Types.
  1399.  */
  1400.  
  1401. typedef enum _WSAESETSERVICEOP
  1402. {
  1403.     RNRSERVICE_REGISTER=0,
  1404.     RNRSERVICE_DEREGISTER,
  1405.     RNRSERVICE_DELETE
  1406. } WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
  1407.  
  1408. /*
  1409.  * Service Installation/Removal Data Types.
  1410.  */
  1411.  
  1412. typedef struct _WSANSClassInfoA
  1413. {
  1414.     LPSTR   lpszName;
  1415.     DWORD   dwNameSpace;
  1416.     DWORD   dwValueType;
  1417.     DWORD   dwValueSize;
  1418.     LPVOID  lpValue;
  1419. }WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
  1420. typedef struct _WSANSClassInfoW
  1421. {
  1422.     LPWSTR  lpszName;
  1423.     DWORD   dwNameSpace;
  1424.     DWORD   dwValueType;
  1425.     DWORD   dwValueSize;
  1426.     LPVOID  lpValue;
  1427. }WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
  1428. #ifdef UNICODE
  1429. typedef WSANSCLASSINFOW WSANSCLASSINFO;
  1430. typedef PWSANSCLASSINFOW PWSANSCLASSINFO;
  1431. typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO;
  1432. #else
  1433. typedef WSANSCLASSINFOA WSANSCLASSINFO;
  1434. typedef PWSANSCLASSINFOA PWSANSCLASSINFO;
  1435. typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO;
  1436. #endif // UNICODE
  1437.  
  1438. typedef struct _WSAServiceClassInfoA
  1439. {
  1440.     LPGUID              lpServiceClassId;
  1441.     LPSTR               lpszServiceClassName;
  1442.     DWORD               dwCount;
  1443.     LPWSANSCLASSINFOA   lpClassInfos;
  1444. }WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
  1445. typedef struct _WSAServiceClassInfoW
  1446. {
  1447.     LPGUID              lpServiceClassId;
  1448.     LPWSTR              lpszServiceClassName;
  1449.     DWORD               dwCount;
  1450.     LPWSANSCLASSINFOW   lpClassInfos;
  1451. }WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
  1452. #ifdef UNICODE
  1453. typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO;
  1454. typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO;
  1455. typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO;
  1456. #else
  1457. typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO;
  1458. typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO;
  1459. typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO;
  1460. #endif // UNICODE
  1461.  
  1462. typedef struct _WSANAMESPACE_INFOA {
  1463.     GUID                NSProviderId;
  1464.     DWORD               dwNameSpace;
  1465.     BOOL                fActive;
  1466.     DWORD               dwVersion;
  1467.     LPSTR               lpszIdentifier;
  1468. } WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
  1469. typedef struct _WSANAMESPACE_INFOW {
  1470.     GUID                NSProviderId;
  1471.     DWORD               dwNameSpace;
  1472.     BOOL                fActive;
  1473.     DWORD               dwVersion;
  1474.     LPWSTR              lpszIdentifier;
  1475. } WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
  1476. #ifdef UNICODE
  1477. typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO;
  1478. typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO;
  1479. typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO;
  1480. #else
  1481. typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO;
  1482. typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO;
  1483. typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO;
  1484. #endif // UNICODE
  1485.  
  1486. /* Socket function prototypes */
  1487.  
  1488. #if INCL_WINSOCK_API_PROTOTYPES
  1489. WINSOCK_API_LINKAGE
  1490. SOCKET
  1491. WSAAPI
  1492. accept(
  1493.     IN SOCKET s,
  1494.     OUT struct sockaddr FAR * addr,
  1495.     IN OUT int FAR * addrlen
  1496.     );
  1497. #endif // INCL_WINSOCK_API_PROTOTYPES
  1498.  
  1499. #if INCL_WINSOCK_API_TYPEDEFS
  1500. typedef
  1501. SOCKET
  1502. (WSAAPI * LPFN_ACCEPT)(
  1503.     IN SOCKET s,
  1504.     OUT struct sockaddr FAR * addr,
  1505.     IN OUT int FAR * addrlen
  1506.     );
  1507. #endif // INCL_WINSOCK_API_TYPEDEFS
  1508.  
  1509. #if INCL_WINSOCK_API_PROTOTYPES
  1510. WINSOCK_API_LINKAGE
  1511. int
  1512. WSAAPI
  1513. bind(
  1514.     IN SOCKET s,
  1515.     IN const struct sockaddr FAR * name,
  1516.     IN int namelen
  1517.     );
  1518. #endif // INCL_WINSOCK_API_PROTOTYPES
  1519.  
  1520. #if INCL_WINSOCK_API_TYPEDEFS
  1521. typedef
  1522. int
  1523. (WSAAPI * LPFN_BIND)(
  1524.     IN SOCKET s,
  1525.     IN const struct sockaddr FAR * name,
  1526.     IN int namelen
  1527.     );
  1528. #endif // INCL_WINSOCK_API_TYPEDEFS
  1529.  
  1530. #if INCL_WINSOCK_API_PROTOTYPES
  1531. WINSOCK_API_LINKAGE
  1532. int
  1533. WSAAPI
  1534. closesocket(
  1535.     IN SOCKET s
  1536.     );
  1537. #endif // INCL_WINSOCK_API_PROTOTYPES
  1538.  
  1539. #if INCL_WINSOCK_API_TYPEDEFS
  1540. typedef
  1541. int
  1542. (WSAAPI * LPFN_CLOSESOCKET)(
  1543.     IN SOCKET s
  1544.     );
  1545. #endif // INCL_WINSOCK_API_TYPEDEFS
  1546.  
  1547. #if INCL_WINSOCK_API_PROTOTYPES
  1548. WINSOCK_API_LINKAGE
  1549. int
  1550. WSAAPI
  1551. connect(
  1552.     IN SOCKET s,
  1553.     IN const struct sockaddr FAR * name,
  1554.     IN int namelen
  1555.     );
  1556. #endif // INCL_WINSOCK_API_PROTOTYPES
  1557.  
  1558. #if INCL_WINSOCK_API_TYPEDEFS
  1559. typedef
  1560. int
  1561. (WSAAPI * LPFN_CONNECT)(
  1562.     IN SOCKET s,
  1563.     IN const struct sockaddr FAR * name,
  1564.     IN int namelen
  1565.     );
  1566. #endif // INCL_WINSOCK_API_TYPEDEFS
  1567.  
  1568. #if INCL_WINSOCK_API_PROTOTYPES
  1569. WINSOCK_API_LINKAGE
  1570. int
  1571. WSAAPI
  1572. ioctlsocket(
  1573.     IN SOCKET s,
  1574.     IN long cmd,
  1575.     IN OUT u_long FAR * argp
  1576.     );
  1577. #endif // INCL_WINSOCK_API_PROTOTYPES
  1578.  
  1579. #if INCL_WINSOCK_API_TYPEDEFS
  1580. typedef
  1581. int
  1582. (WSAAPI * LPFN_IOCTLSOCKET)(
  1583.     IN SOCKET s,
  1584.     IN long cmd,
  1585.     IN OUT u_long FAR * argp
  1586.     );
  1587. #endif // INCL_WINSOCK_API_TYPEDEFS
  1588.  
  1589. #if INCL_WINSOCK_API_PROTOTYPES
  1590. WINSOCK_API_LINKAGE
  1591. int
  1592. WSAAPI
  1593. getpeername(
  1594.     IN SOCKET s,
  1595.     OUT struct sockaddr FAR * name,
  1596.     IN OUT int FAR * namelen
  1597.     );
  1598. #endif // INCL_WINSOCK_API_PROTOTYPES
  1599.  
  1600. #if INCL_WINSOCK_API_TYPEDEFS
  1601. typedef
  1602. int
  1603. (WSAAPI * LPFN_GETPEERNAME)(
  1604.     IN SOCKET s,
  1605.     IN struct sockaddr FAR * name,
  1606.     IN OUT int FAR * namelen
  1607.     );
  1608. #endif // INCL_WINSOCK_API_TYPEDEFS
  1609.  
  1610. #if INCL_WINSOCK_API_PROTOTYPES
  1611. WINSOCK_API_LINKAGE
  1612. int
  1613. WSAAPI
  1614. getsockname(
  1615.     IN SOCKET s,
  1616.     OUT struct sockaddr FAR * name,
  1617.     IN OUT int FAR * namelen
  1618.     );
  1619. #endif // INCL_WINSOCK_API_PROTOTYPES
  1620.  
  1621. #if INCL_WINSOCK_API_TYPEDEFS
  1622. typedef
  1623. int
  1624. (WSAAPI * LPFN_GETSOCKNAME)(
  1625.     IN SOCKET s,
  1626.     OUT struct sockaddr FAR * name,
  1627.     IN OUT int FAR * namelen
  1628.     );
  1629. #endif // INCL_WINSOCK_API_TYPEDEFS
  1630.  
  1631. #if INCL_WINSOCK_API_PROTOTYPES
  1632. WINSOCK_API_LINKAGE
  1633. int
  1634. WSAAPI
  1635. getsockopt(
  1636.     IN SOCKET s,
  1637.     IN int level,
  1638.     IN int optname,
  1639.     OUT char FAR * optval,
  1640.     IN OUT int FAR * optlen
  1641.     );
  1642. #endif // INCL_WINSOCK_API_PROTOTYPES
  1643.  
  1644. #if INCL_WINSOCK_API_TYPEDEFS
  1645. typedef
  1646. int
  1647. (WSAAPI * LPFN_GETSOCKOPT)(
  1648.     IN SOCKET s,
  1649.     IN int level,
  1650.     IN int optname,
  1651.     OUT char FAR * optval,
  1652.     IN OUT int FAR * optlen
  1653.     );
  1654. #endif // INCL_WINSOCK_API_TYPEDEFS
  1655.  
  1656. #if INCL_WINSOCK_API_PROTOTYPES
  1657. WINSOCK_API_LINKAGE
  1658. u_long
  1659. WSAAPI
  1660. htonl(
  1661.     IN u_long hostlong
  1662.     );
  1663. #endif // INCL_WINSOCK_API_PROTOTYPES
  1664.  
  1665. #if INCL_WINSOCK_API_TYPEDEFS
  1666. typedef
  1667. u_long
  1668. (WSAAPI * LPFN_HTONL)(
  1669.     IN u_long hostlong
  1670.     );
  1671. #endif // INCL_WINSOCK_API_TYPEDEFS
  1672.  
  1673. #if INCL_WINSOCK_API_PROTOTYPES
  1674. WINSOCK_API_LINKAGE
  1675. u_short
  1676. WSAAPI
  1677. htons(
  1678.     IN u_short hostshort
  1679.     );
  1680. #endif // INCL_WINSOCK_API_PROTOTYPES
  1681.  
  1682. #if INCL_WINSOCK_API_TYPEDEFS
  1683. typedef
  1684. u_short
  1685. (WSAAPI * LPFN_HTONS)(
  1686.     IN u_short hostshort
  1687.     );
  1688. #endif // INCL_WINSOCK_API_TYPEDEFS
  1689.  
  1690. #if INCL_WINSOCK_API_PROTOTYPES
  1691. WINSOCK_API_LINKAGE
  1692. unsigned long
  1693. WSAAPI
  1694. inet_addr(
  1695.     IN const char FAR * cp
  1696.     );
  1697. #endif // INCL_WINSOCK_API_PROTOTYPES
  1698.  
  1699. #if INCL_WINSOCK_API_TYPEDEFS
  1700. typedef
  1701. unsigned long
  1702. (WSAAPI * LPFN_INET_ADDR)(
  1703.     IN const char FAR * cp
  1704.     );
  1705. #endif // INCL_WINSOCK_API_TYPEDEFS
  1706.  
  1707. #if INCL_WINSOCK_API_PROTOTYPES
  1708. WINSOCK_API_LINKAGE
  1709. char FAR *
  1710. WSAAPI
  1711. inet_ntoa(
  1712.     IN struct in_addr in
  1713.     );
  1714. #endif // INCL_WINSOCK_API_PROTOTYPES
  1715.  
  1716. #if INCL_WINSOCK_API_TYPEDEFS
  1717. typedef
  1718. char FAR *
  1719. (WSAAPI * LPFN_INET_NTOA)(
  1720.     IN struct in_addr in
  1721.     );
  1722. #endif // INCL_WINSOCK_API_TYPEDEFS
  1723.  
  1724. #if INCL_WINSOCK_API_PROTOTYPES
  1725. WINSOCK_API_LINKAGE
  1726. int
  1727. WSAAPI
  1728. listen(
  1729.     IN SOCKET s,
  1730.     IN int backlog
  1731.     );
  1732. #endif // INCL_WINSOCK_API_PROTOTYPES
  1733.  
  1734. #if INCL_WINSOCK_API_TYPEDEFS
  1735. typedef
  1736. int
  1737. (WSAAPI * LPFN_LISTEN)(
  1738.     IN SOCKET s,
  1739.     IN int backlog
  1740.     );
  1741. #endif // INCL_WINSOCK_API_TYPEDEFS
  1742.  
  1743. #if INCL_WINSOCK_API_PROTOTYPES
  1744. WINSOCK_API_LINKAGE
  1745. u_long
  1746. WSAAPI
  1747. ntohl(
  1748.     IN u_long netlong
  1749.     );
  1750. #endif // INCL_WINSOCK_API_PROTOTYPES
  1751.  
  1752. #if INCL_WINSOCK_API_TYPEDEFS
  1753. typedef
  1754. u_long
  1755. (WSAAPI * LPFN_NTOHL)(
  1756.     IN u_long netlong
  1757.     );
  1758. #endif // INCL_WINSOCK_API_TYPEDEFS
  1759.  
  1760. #if INCL_WINSOCK_API_PROTOTYPES
  1761. WINSOCK_API_LINKAGE
  1762. u_short
  1763. WSAAPI
  1764. ntohs(
  1765.     IN u_short netshort
  1766.     );
  1767. #endif // INCL_WINSOCK_API_PROTOTYPES
  1768.  
  1769. #if INCL_WINSOCK_API_TYPEDEFS
  1770. typedef
  1771. u_short
  1772. (WSAAPI * LPFN_NTOHS)(
  1773.     IN u_short netshort
  1774.     );
  1775. #endif // INCL_WINSOCK_API_TYPEDEFS
  1776.  
  1777. #if INCL_WINSOCK_API_PROTOTYPES
  1778. WINSOCK_API_LINKAGE
  1779. int
  1780. WSAAPI
  1781. recv(
  1782.     IN SOCKET s,
  1783.     OUT char FAR * buf,
  1784.     IN int len,
  1785.     IN int flags
  1786.     );
  1787. #endif // INCL_WINSOCK_API_PROTOTYPES
  1788.  
  1789. #if INCL_WINSOCK_API_TYPEDEFS
  1790. typedef
  1791. int
  1792. (WSAAPI * LPFN_RECV)(
  1793.     IN SOCKET s,
  1794.     OUT char FAR * buf,
  1795.     IN int len,
  1796.     IN int flags
  1797.     );
  1798. #endif // INCL_WINSOCK_API_TYPEDEFS
  1799.  
  1800. #if INCL_WINSOCK_API_PROTOTYPES
  1801. WINSOCK_API_LINKAGE
  1802. int
  1803. WSAAPI
  1804. recvfrom(
  1805.     IN SOCKET s,
  1806.     OUT char FAR * buf,
  1807.     IN int len,
  1808.     IN int flags,
  1809.     OUT struct sockaddr FAR * from,
  1810.     IN OUT int FAR * fromlen
  1811.     );
  1812. #endif // INCL_WINSOCK_API_PROTOTYPES
  1813.  
  1814. #if INCL_WINSOCK_API_TYPEDEFS
  1815. typedef
  1816. int
  1817. (WSAAPI * LPFN_RECVFROM)(
  1818.     IN SOCKET s,
  1819.     OUT char FAR * buf,
  1820.     IN int len,
  1821.     IN int flags,
  1822.     OUT struct sockaddr FAR * from,
  1823.     IN OUT int FAR * fromlen
  1824.     );
  1825. #endif // INCL_WINSOCK_API_TYPEDEFS
  1826.  
  1827. #if INCL_WINSOCK_API_PROTOTYPES
  1828. WINSOCK_API_LINKAGE
  1829. int
  1830. WSAAPI
  1831. select(
  1832.     IN int nfds,
  1833.     IN OUT fd_set FAR * readfds,
  1834.     IN OUT fd_set FAR * writefds,
  1835.     IN OUT fd_set FAR *exceptfds,
  1836.     IN const struct timeval FAR * timeout
  1837.     );
  1838. #endif // INCL_WINSOCK_API_PROTOTYPES
  1839.  
  1840. #if INCL_WINSOCK_API_TYPEDEFS
  1841. typedef
  1842. int
  1843. (WSAAPI * LPFN_SELECT)(
  1844.     IN int nfds,
  1845.     IN OUT fd_set FAR * readfds,
  1846.     IN OUT fd_set FAR * writefds,
  1847.     IN OUT fd_set FAR *exceptfds,
  1848.     IN const struct timeval FAR * timeout
  1849.     );
  1850. #endif // INCL_WINSOCK_API_TYPEDEFS
  1851.  
  1852. #if INCL_WINSOCK_API_PROTOTYPES
  1853. WINSOCK_API_LINKAGE
  1854. int
  1855. WSAAPI
  1856. send(
  1857.     IN SOCKET s,
  1858.     IN const char FAR * buf,
  1859.     IN int len,
  1860.     IN int flags
  1861.     );
  1862. #endif // INCL_WINSOCK_API_PROTOTYPES
  1863.  
  1864. #if INCL_WINSOCK_API_TYPEDEFS
  1865. typedef
  1866. int
  1867. (WSAAPI * LPFN_SEND)(
  1868.     IN SOCKET s,
  1869.     IN const char FAR * buf,
  1870.     IN int len,
  1871.     IN int flags
  1872.     );
  1873. #endif // INCL_WINSOCK_API_TYPEDEFS
  1874.  
  1875. #if INCL_WINSOCK_API_PROTOTYPES
  1876. WINSOCK_API_LINKAGE
  1877. int
  1878. WSAAPI
  1879. sendto(
  1880.     IN SOCKET s,
  1881.     IN const char FAR * buf,
  1882.     IN int len,
  1883.     IN int flags,
  1884.     IN const struct sockaddr FAR * to,
  1885.     IN int tolen
  1886.     );
  1887. #endif // INCL_WINSOCK_API_PROTOTYPES
  1888.  
  1889. #if INCL_WINSOCK_API_TYPEDEFS
  1890. typedef
  1891. int
  1892. (WSAAPI * LPFN_SENDTO)(
  1893.     IN SOCKET s,
  1894.     IN const char FAR * buf,
  1895.     IN int len,
  1896.     IN int flags,
  1897.     IN const struct sockaddr FAR * to,
  1898.     IN int tolen
  1899.     );
  1900. #endif // INCL_WINSOCK_API_TYPEDEFS
  1901.  
  1902. #if INCL_WINSOCK_API_PROTOTYPES
  1903. WINSOCK_API_LINKAGE
  1904. int
  1905. WSAAPI
  1906. setsockopt(
  1907.     IN SOCKET s,
  1908.     IN int level,
  1909.     IN int optname,
  1910.     IN const char FAR * optval,
  1911.     IN int optlen
  1912.     );
  1913. #endif // INCL_WINSOCK_API_PROTOTYPES
  1914.  
  1915. #if INCL_WINSOCK_API_TYPEDEFS
  1916. typedef
  1917. int
  1918. (WSAAPI * LPFN_SETSOCKOPT)(
  1919.     IN SOCKET s,
  1920.     IN int level,
  1921.     IN int optname,
  1922.     IN const char FAR * optval,
  1923.     IN int optlen
  1924.     );
  1925. #endif // INCL_WINSOCK_API_TYPEDEFS
  1926.  
  1927. #if INCL_WINSOCK_API_PROTOTYPES
  1928. WINSOCK_API_LINKAGE
  1929. int
  1930. WSAAPI
  1931. shutdown(
  1932.     IN SOCKET s,
  1933.     IN int how
  1934.     );
  1935. #endif // INCL_WINSOCK_API_PROTOTYPES
  1936.  
  1937. #if INCL_WINSOCK_API_TYPEDEFS
  1938. typedef
  1939. int
  1940. (WSAAPI * LPFN_SHUTDOWN)(
  1941.     IN SOCKET s,
  1942.     IN int how
  1943.     );
  1944. #endif // INCL_WINSOCK_API_TYPEDEFS
  1945.  
  1946. #if INCL_WINSOCK_API_PROTOTYPES
  1947. WINSOCK_API_LINKAGE
  1948. SOCKET
  1949. WSAAPI
  1950. socket(
  1951.     IN int af,
  1952.     IN int type,
  1953.     IN int protocol
  1954.     );
  1955. #endif // INCL_WINSOCK_API_PROTOTYPES
  1956.  
  1957. #if INCL_WINSOCK_API_TYPEDEFS
  1958. typedef
  1959. SOCKET
  1960. (WSAAPI * LPFN_SOCKET)(
  1961.     IN int af,
  1962.     IN int type,
  1963.     IN int protocol
  1964.     );
  1965. #endif // INCL_WINSOCK_API_TYPEDEFS
  1966.  
  1967. /* Database function prototypes */
  1968.  
  1969. #if INCL_WINSOCK_API_PROTOTYPES
  1970. WINSOCK_API_LINKAGE
  1971. struct hostent FAR *
  1972. WSAAPI
  1973. gethostbyaddr(
  1974.     IN const char FAR * addr,
  1975.     IN int len,
  1976.     IN int type
  1977.     );
  1978. #endif // INCL_WINSOCK_API_PROTOTYPES
  1979.  
  1980. #if INCL_WINSOCK_API_TYPEDEFS
  1981. typedef
  1982. struct hostent FAR *
  1983. (WSAAPI * LPFN_GETHOSTBYADDR)(
  1984.     IN const char FAR * addr,
  1985.     IN int len,
  1986.     IN int type
  1987.     );
  1988. #endif // INCL_WINSOCK_API_TYPEDEFS
  1989.  
  1990. #if INCL_WINSOCK_API_PROTOTYPES
  1991. WINSOCK_API_LINKAGE
  1992. struct hostent FAR *
  1993. WSAAPI
  1994. gethostbyname(
  1995.     IN const char FAR * name
  1996.     );
  1997. #endif // INCL_WINSOCK_API_PROTOTYPES
  1998.  
  1999. #if INCL_WINSOCK_API_TYPEDEFS
  2000. typedef
  2001. struct hostent FAR *
  2002. (WSAAPI * LPFN_GETHOSTBYNAME)(
  2003.     IN const char FAR * name
  2004.     );
  2005. #endif // INCL_WINSOCK_API_TYPEDEFS
  2006.  
  2007. #if INCL_WINSOCK_API_PROTOTYPES
  2008. WINSOCK_API_LINKAGE
  2009. int
  2010. WSAAPI
  2011. gethostname(
  2012.     OUT char FAR * name,
  2013.     IN int namelen
  2014.     );
  2015. #endif // INCL_WINSOCK_API_PROTOTYPES
  2016.  
  2017. #if INCL_WINSOCK_API_TYPEDEFS
  2018. typedef
  2019. int
  2020. (WSAAPI * LPFN_GETHOSTNAME)(
  2021.     OUT char FAR * name,
  2022.     IN int namelen
  2023.     );
  2024. #endif // INCL_WINSOCK_API_TYPEDEFS
  2025.  
  2026. #if INCL_WINSOCK_API_PROTOTYPES
  2027. WINSOCK_API_LINKAGE
  2028. struct servent FAR *
  2029. WSAAPI
  2030. getservbyport(
  2031.     IN int port,
  2032.     IN const char FAR * proto
  2033.     );
  2034. #endif // INCL_WINSOCK_API_PROTOTYPES
  2035.  
  2036. #if INCL_WINSOCK_API_TYPEDEFS
  2037. typedef
  2038. struct servent FAR *
  2039. (WSAAPI * LPFN_GETSERVBYPORT)(
  2040.     IN int port,
  2041.     IN const char FAR * proto
  2042.     );
  2043. #endif // INCL_WINSOCK_API_TYPEDEFS
  2044.  
  2045. #if INCL_WINSOCK_API_PROTOTYPES
  2046. WINSOCK_API_LINKAGE
  2047. struct servent FAR *
  2048. WSAAPI
  2049. getservbyname(
  2050.     IN const char FAR * name,
  2051.     IN const char FAR * proto
  2052.     );
  2053. #endif // INCL_WINSOCK_API_PROTOTYPES
  2054.  
  2055. #if INCL_WINSOCK_API_TYPEDEFS
  2056. typedef
  2057. struct servent FAR *
  2058. (WSAAPI * LPFN_GETSERVBYNAME)(
  2059.     IN const char FAR * name,
  2060.     IN const char FAR * proto
  2061.     );
  2062. #endif // INCL_WINSOCK_API_TYPEDEFS
  2063.  
  2064. #if INCL_WINSOCK_API_PROTOTYPES
  2065. WINSOCK_API_LINKAGE
  2066. struct protoent FAR *
  2067. WSAAPI
  2068. getprotobynumber(
  2069.     IN int number
  2070.     );
  2071. #endif // INCL_WINSOCK_API_PROTOTYPES
  2072.  
  2073. #if INCL_WINSOCK_API_TYPEDEFS
  2074. typedef
  2075. struct protoent FAR *
  2076. (WSAAPI * LPFN_GETPROTOBYNUMBER)(
  2077.     IN int number
  2078.     );
  2079. #endif // INCL_WINSOCK_API_TYPEDEFS
  2080.  
  2081. #if INCL_WINSOCK_API_PROTOTYPES
  2082. WINSOCK_API_LINKAGE
  2083. struct protoent FAR *
  2084. WSAAPI
  2085. getprotobyname(
  2086.     IN const char FAR * name
  2087.     );
  2088. #endif // INCL_WINSOCK_API_PROTOTYPES
  2089.  
  2090. #if INCL_WINSOCK_API_TYPEDEFS
  2091. typedef
  2092. struct protoent FAR *
  2093. (WSAAPI * LPFN_GETPROTOBYNAME)(
  2094.     IN const char FAR * name
  2095.     );
  2096. #endif // INCL_WINSOCK_API_TYPEDEFS
  2097.  
  2098. /* Microsoft Windows Extension function prototypes */
  2099.  
  2100. #if INCL_WINSOCK_API_PROTOTYPES
  2101. WINSOCK_API_LINKAGE
  2102. int
  2103. WSAAPI
  2104. WSAStartup(
  2105.     IN WORD wVersionRequested,
  2106.     OUT LPWSADATA lpWSAData
  2107.     );
  2108. #endif // INCL_WINSOCK_API_PROTOTYPES
  2109.  
  2110. #if INCL_WINSOCK_API_TYPEDEFS
  2111. typedef
  2112. int
  2113. (WSAAPI * LPFN_WSASTARTUP)(
  2114.     IN WORD wVersionRequested,
  2115.     OUT LPWSADATA lpWSAData
  2116.     );
  2117. #endif // INCL_WINSOCK_API_TYPEDEFS
  2118.  
  2119. #if INCL_WINSOCK_API_PROTOTYPES
  2120. WINSOCK_API_LINKAGE
  2121. int
  2122. WSAAPI
  2123. WSACleanup(
  2124.     void
  2125.     );
  2126. #endif // INCL_WINSOCK_API_PROTOTYPES
  2127.  
  2128. #if INCL_WINSOCK_API_TYPEDEFS
  2129. typedef
  2130. int
  2131. (WSAAPI * LPFN_WSACLEANUP)(
  2132.     void
  2133.     );
  2134. #endif // INCL_WINSOCK_API_TYPEDEFS
  2135.  
  2136. #if INCL_WINSOCK_API_PROTOTYPES
  2137. WINSOCK_API_LINKAGE
  2138. void
  2139. WSAAPI
  2140. WSASetLastError(
  2141.     IN int iError
  2142.     );
  2143. #endif // INCL_WINSOCK_API_PROTOTYPES
  2144.  
  2145. #if INCL_WINSOCK_API_TYPEDEFS
  2146. typedef
  2147. void
  2148. (WSAAPI * LPFN_WSASETLASTERROR)(
  2149.     IN int iError
  2150.     );
  2151. #endif // INCL_WINSOCK_API_TYPEDEFS
  2152.  
  2153. #if INCL_WINSOCK_API_PROTOTYPES
  2154. WINSOCK_API_LINKAGE
  2155. int
  2156. WSAAPI
  2157. WSAGetLastError(
  2158.     void
  2159.     );
  2160. #endif // INCL_WINSOCK_API_PROTOTYPES
  2161.  
  2162. #if INCL_WINSOCK_API_TYPEDEFS
  2163. typedef
  2164. int
  2165. (WSAAPI * LPFN_WSAGETLASTERROR)(
  2166.     void
  2167.     );
  2168. #endif // INCL_WINSOCK_API_TYPEDEFS
  2169.  
  2170. #if INCL_WINSOCK_API_PROTOTYPES
  2171. WINSOCK_API_LINKAGE
  2172. BOOL
  2173. WSAAPI
  2174. WSAIsBlocking(
  2175.     void
  2176.     );
  2177. #endif // INCL_WINSOCK_API_PROTOTYPES
  2178.  
  2179. #if INCL_WINSOCK_API_TYPEDEFS
  2180. typedef
  2181. BOOL
  2182. (WSAAPI * LPFN_WSAISBLOCKING)(
  2183.     void
  2184.     );
  2185. #endif // INCL_WINSOCK_API_TYPEDEFS
  2186.  
  2187. #if INCL_WINSOCK_API_PROTOTYPES
  2188. WINSOCK_API_LINKAGE
  2189. int
  2190. WSAAPI
  2191. WSAUnhookBlockingHook(
  2192.     void
  2193.     );
  2194. #endif // INCL_WINSOCK_API_PROTOTYPES
  2195.  
  2196. #if INCL_WINSOCK_API_TYPEDEFS
  2197. typedef
  2198. int
  2199. (WSAAPI * LPFN_WSAUNHOOKBLOCKINGHOOK)(
  2200.     void
  2201.     );
  2202. #endif // INCL_WINSOCK_API_TYPEDEFS
  2203.  
  2204. #if INCL_WINSOCK_API_PROTOTYPES
  2205. WINSOCK_API_LINKAGE
  2206. FARPROC
  2207. WSAAPI
  2208. WSASetBlockingHook(
  2209.     IN FARPROC lpBlockFunc
  2210.     );
  2211. #endif // INCL_WINSOCK_API_PROTOTYPES
  2212.  
  2213. #if INCL_WINSOCK_API_TYPEDEFS
  2214. typedef
  2215. FARPROC
  2216. (WSAAPI * LPFN_WSASETBLOCKINGHOOK)(
  2217.     IN FARPROC lpBlockFunc
  2218.     );
  2219. #endif // INCL_WINSOCK_API_TYPEDEFS
  2220.  
  2221. #if INCL_WINSOCK_API_PROTOTYPES
  2222. WINSOCK_API_LINKAGE
  2223. int
  2224. WSAAPI
  2225. WSACancelBlockingCall(
  2226.     void
  2227.     );
  2228. #endif // INCL_WINSOCK_API_PROTOTYPES
  2229.  
  2230. #if INCL_WINSOCK_API_TYPEDEFS
  2231. typedef
  2232. int
  2233. (WSAAPI * LPFN_WSACANCELBLOCKINGCALL)(
  2234.     void
  2235.     );
  2236. #endif // INCL_WINSOCK_API_TYPEDEFS
  2237.  
  2238. #if INCL_WINSOCK_API_PROTOTYPES
  2239. WINSOCK_API_LINKAGE
  2240. HANDLE
  2241. WSAAPI
  2242. WSAAsyncGetServByName(
  2243.     IN HWND hWnd,
  2244.     IN u_int wMsg,
  2245.     IN const char FAR * name,
  2246.     IN const char FAR * proto,
  2247.     OUT char FAR * buf,
  2248.     IN int buflen
  2249.     );
  2250. #endif // INCL_WINSOCK_API_PROTOTYPES
  2251.  
  2252. #if INCL_WINSOCK_API_TYPEDEFS
  2253. typedef
  2254. HANDLE
  2255. (WSAAPI * LPFN_WSAASYNCGETSERVBYNAME)(
  2256.     IN HWND hWnd,
  2257.     IN u_int wMsg,
  2258.     IN const char FAR * name,
  2259.     IN const char FAR * proto,
  2260.     OUT char FAR * buf,
  2261.     IN int buflen
  2262.     );
  2263. #endif // INCL_WINSOCK_API_TYPEDEFS
  2264.  
  2265. #if INCL_WINSOCK_API_PROTOTYPES
  2266. WINSOCK_API_LINKAGE
  2267. HANDLE
  2268. WSAAPI
  2269. WSAAsyncGetServByPort(
  2270.     IN HWND hWnd,
  2271.     IN u_int wMsg,
  2272.     IN int port,
  2273.     IN const char FAR * proto,
  2274.     OUT char FAR * buf,
  2275.     IN int buflen
  2276.     );
  2277. #endif // INCL_WINSOCK_API_PROTOTYPES
  2278.  
  2279. #if INCL_WINSOCK_API_TYPEDEFS
  2280. typedef
  2281. HANDLE
  2282. (WSAAPI * LPFN_WSAASYNCGETSERVBYPORT)(
  2283.     IN HWND hWnd,
  2284.     IN u_int wMsg,
  2285.     IN int port,
  2286.     IN const char FAR * proto,
  2287.     OUT char FAR * buf,
  2288.     IN int buflen
  2289.     );
  2290. #endif // INCL_WINSOCK_API_TYPEDEFS
  2291.  
  2292. #if INCL_WINSOCK_API_PROTOTYPES
  2293. WINSOCK_API_LINKAGE
  2294. HANDLE
  2295. WSAAPI
  2296. WSAAsyncGetProtoByName(
  2297.     IN HWND hWnd,
  2298.     IN u_int wMsg,
  2299.     IN const char FAR * name,
  2300.     OUT char FAR * buf,
  2301.     IN int buflen
  2302.     );
  2303. #endif // INCL_WINSOCK_API_PROTOTYPES
  2304.  
  2305. #if INCL_WINSOCK_API_TYPEDEFS
  2306. typedef
  2307. HANDLE
  2308. (WSAAPI * LPFN_WSAASYNCGETPROTOBYNAME)(
  2309.     IN HWND hWnd,
  2310.     IN u_int wMsg,
  2311.     IN const char FAR * name,
  2312.     OUT char FAR * buf,
  2313.     IN int buflen
  2314.     );
  2315. #endif // INCL_WINSOCK_API_TYPEDEFS
  2316.  
  2317. #if INCL_WINSOCK_API_PROTOTYPES
  2318. WINSOCK_API_LINKAGE
  2319. HANDLE
  2320. WSAAPI
  2321. WSAAsyncGetProtoByNumber(
  2322.     IN HWND hWnd,
  2323.     IN u_int wMsg,
  2324.     IN int number,
  2325.     OUT char FAR * buf,
  2326.     IN int buflen
  2327.     );
  2328. #endif // INCL_WINSOCK_API_PROTOTYPES
  2329.  
  2330. #if INCL_WINSOCK_API_TYPEDEFS
  2331. typedef
  2332. HANDLE
  2333. (WSAAPI * LPFN_WSAASYNCGETPROTOBYNUMBER)(
  2334.     IN HWND hWnd,
  2335.     IN u_int wMsg,
  2336.     IN int number,
  2337.     OUT char FAR * buf,
  2338.     IN int buflen
  2339.     );
  2340. #endif // INCL_WINSOCK_API_TYPEDEFS
  2341.  
  2342. #if INCL_WINSOCK_API_PROTOTYPES
  2343. WINSOCK_API_LINKAGE
  2344. HANDLE
  2345. WSAAPI
  2346. WSAAsyncGetHostByName(
  2347.     IN HWND hWnd,
  2348.     IN u_int wMsg,
  2349.     IN const char FAR * name,
  2350.     OUT char FAR * buf,
  2351.     IN int buflen
  2352.     );
  2353. #endif // INCL_WINSOCK_API_PROTOTYPES
  2354.  
  2355. #if INCL_WINSOCK_API_TYPEDEFS
  2356. typedef
  2357. HANDLE
  2358. (WSAAPI * LPFN_WSAASYNCGETHOSTBYNAME)(
  2359.     IN HWND hWnd,
  2360.     IN u_int wMsg,
  2361.     IN const char FAR * name,
  2362.     OUT char FAR * buf,
  2363.     IN int buflen
  2364.     );
  2365. #endif // INCL_WINSOCK_API_TYPEDEFS
  2366.  
  2367. #if INCL_WINSOCK_API_PROTOTYPES
  2368. WINSOCK_API_LINKAGE
  2369. HANDLE
  2370. WSAAPI
  2371. WSAAsyncGetHostByAddr(
  2372.     IN HWND hWnd,
  2373.     IN u_int wMsg,
  2374.     IN const char FAR * addr,
  2375.     IN int len,
  2376.     IN int type,
  2377.     OUT char FAR * buf,
  2378.     IN int buflen
  2379.     );
  2380. #endif // INCL_WINSOCK_API_PROTOTYPES
  2381.  
  2382. #if INCL_WINSOCK_API_TYPEDEFS
  2383. typedef
  2384. HANDLE
  2385. (WSAAPI * LPFN_WSAASYNCGETHOSTBYADDR)(
  2386.     IN HWND hWnd,
  2387.     IN u_int wMsg,
  2388.     IN const char FAR * addr,
  2389.     IN int len,
  2390.     IN int type,
  2391.     OUT char FAR * buf,
  2392.     IN int buflen
  2393.     );
  2394. #endif // INCL_WINSOCK_API_TYPEDEFS
  2395.  
  2396. #if INCL_WINSOCK_API_PROTOTYPES
  2397. WINSOCK_API_LINKAGE
  2398. int
  2399. WSAAPI
  2400. WSACancelAsyncRequest(
  2401.     IN HANDLE hAsyncTaskHandle
  2402.     );
  2403. #endif // INCL_WINSOCK_API_PROTOTYPES
  2404.  
  2405. #if INCL_WINSOCK_API_TYPEDEFS
  2406. typedef
  2407. int
  2408. (WSAAPI * LPFN_WSACANCELASYNCREQUEST)(
  2409.     IN HANDLE hAsyncTaskHandle
  2410.     );
  2411. #endif // INCL_WINSOCK_API_TYPEDEFS
  2412.  
  2413. #if INCL_WINSOCK_API_PROTOTYPES
  2414. WINSOCK_API_LINKAGE
  2415. int
  2416. WSAAPI
  2417. WSAAsyncSelect(
  2418.     IN SOCKET s,
  2419.     IN HWND hWnd,
  2420.     IN u_int wMsg,
  2421.     IN long lEvent
  2422.     );
  2423. #endif // INCL_WINSOCK_API_PROTOTYPES
  2424.  
  2425. #if INCL_WINSOCK_API_TYPEDEFS
  2426. typedef
  2427. int
  2428. (WSAAPI * LPFN_WSAASYNCSELECT)(
  2429.     IN SOCKET s,
  2430.     IN HWND hWnd,
  2431.     IN u_int wMsg,
  2432.     IN long lEvent
  2433.     );
  2434. #endif // INCL_WINSOCK_API_TYPEDEFS
  2435.  
  2436. /*
  2437.  * WinSock 2 extensions -- data types for the condition function in
  2438.  * WSAAccept() and overlapped I/O completion routine.
  2439.  */
  2440.  
  2441. typedef
  2442. int
  2443. (CALLBACK * LPCONDITIONPROC)(
  2444.     IN LPWSABUF lpCallerId,
  2445.     IN LPWSABUF lpCallerData,
  2446.     IN OUT LPQOS lpSQOS,
  2447.     IN OUT LPQOS lpGQOS,
  2448.     IN LPWSABUF lpCalleeId,
  2449.     IN LPWSABUF lpCalleeData,
  2450.     OUT GROUP FAR * g,
  2451.     IN DWORD_PTR dwCallbackData
  2452.     );
  2453.  
  2454. typedef
  2455. void
  2456. (CALLBACK * LPWSAOVERLAPPED_COMPLETION_ROUTINE)(
  2457.     IN DWORD dwError,
  2458.     IN DWORD cbTransferred,
  2459.     IN LPWSAOVERLAPPED lpOverlapped,
  2460.     IN DWORD dwFlags
  2461.     );
  2462.  
  2463. /* WinSock 2 API new function prototypes */
  2464.  
  2465. #if INCL_WINSOCK_API_PROTOTYPES
  2466. WINSOCK_API_LINKAGE
  2467. SOCKET
  2468. WSAAPI
  2469. WSAAccept(
  2470.     IN SOCKET s,
  2471.     OUT struct sockaddr FAR * addr,
  2472.     IN OUT LPINT addrlen,
  2473.     IN LPCONDITIONPROC lpfnCondition,
  2474.     IN DWORD_PTR dwCallbackData
  2475.     );
  2476. #endif // INCL_WINSOCK_API_PROTOTYPES
  2477.  
  2478. #if INCL_WINSOCK_API_TYPEDEFS
  2479. typedef
  2480. SOCKET
  2481. (WSAAPI * LPFN_WSAACCEPT)(
  2482.     IN SOCKET s,
  2483.     OUT struct sockaddr FAR * addr,
  2484.     IN OUT LPINT addrlen,
  2485.     IN LPCONDITIONPROC lpfnCondition,
  2486.     IN DWORD_PTR dwCallbackData
  2487.     );
  2488. #endif // INCL_WINSOCK_API_TYPEDEFS
  2489.  
  2490. #if INCL_WINSOCK_API_PROTOTYPES
  2491. WINSOCK_API_LINKAGE
  2492. BOOL
  2493. WSAAPI
  2494. WSACloseEvent(
  2495.     IN WSAEVENT hEvent
  2496.     );
  2497. #endif // INCL_WINSOCK_API_PROTOTYPES
  2498.  
  2499. #if INCL_WINSOCK_API_TYPEDEFS
  2500. typedef
  2501. BOOL
  2502. (WSAAPI * LPFN_WSACLOSEEVENT)(
  2503.     IN WSAEVENT hEvent
  2504.     );
  2505. #endif // INCL_WINSOCK_API_TYPEDEFS
  2506.  
  2507. #if INCL_WINSOCK_API_PROTOTYPES
  2508. WINSOCK_API_LINKAGE
  2509. int
  2510. WSAAPI
  2511. WSAConnect(
  2512.     IN SOCKET s,
  2513.     IN const struct sockaddr FAR * name,
  2514.     IN int namelen,
  2515.     IN LPWSABUF lpCallerData,
  2516.     OUT LPWSABUF lpCalleeData,
  2517.     IN LPQOS lpSQOS,
  2518.     IN LPQOS lpGQOS
  2519.     );
  2520. #endif // INCL_WINSOCK_API_PROTOTYPES
  2521.  
  2522. #if INCL_WINSOCK_API_TYPEDEFS
  2523. typedef
  2524. int
  2525. (WSAAPI * LPFN_WSACONNECT)(
  2526.     IN SOCKET s,
  2527.     IN const struct sockaddr FAR * name,
  2528.     IN int namelen,
  2529.     IN LPWSABUF lpCallerData,
  2530.     OUT LPWSABUF lpCalleeData,
  2531.     IN LPQOS lpSQOS,
  2532.     IN LPQOS lpGQOS
  2533.     );
  2534. #endif // INCL_WINSOCK_API_TYPEDEFS
  2535.  
  2536. #if INCL_WINSOCK_API_PROTOTYPES
  2537. WINSOCK_API_LINKAGE
  2538. WSAEVENT
  2539. WSAAPI
  2540. WSACreateEvent(
  2541.     void
  2542.     );
  2543. #endif // INCL_WINSOCK_API_PROTOTYPES
  2544.  
  2545. #if INCL_WINSOCK_API_TYPEDEFS
  2546. typedef
  2547. WSAEVENT
  2548. (WSAAPI * LPFN_WSACREATEEVENT)(
  2549.     void
  2550.     );
  2551. #endif // INCL_WINSOCK_API_TYPEDEFS
  2552.  
  2553. #if INCL_WINSOCK_API_PROTOTYPES
  2554. WINSOCK_API_LINKAGE
  2555. int
  2556. WSAAPI
  2557. WSADuplicateSocketA(
  2558.     IN SOCKET s,
  2559.     IN DWORD dwProcessId,
  2560.     OUT LPWSAPROTOCOL_INFOA lpProtocolInfo
  2561.     );
  2562. WINSOCK_API_LINKAGE
  2563. int
  2564. WSAAPI
  2565. WSADuplicateSocketW(
  2566.     IN SOCKET s,
  2567.     IN DWORD dwProcessId,
  2568.     OUT LPWSAPROTOCOL_INFOW lpProtocolInfo
  2569.     );
  2570. #ifdef UNICODE
  2571. #define WSADuplicateSocket  WSADuplicateSocketW
  2572. #else
  2573. #define WSADuplicateSocket  WSADuplicateSocketA
  2574. #endif // !UNICODE
  2575. #endif // INCL_WINSOCK_API_PROTOTYPES
  2576.  
  2577. #if INCL_WINSOCK_API_TYPEDEFS
  2578. typedef
  2579. int
  2580. (WSAAPI * LPFN_WSADUPLICATESOCKETA)(
  2581.     IN SOCKET s,
  2582.     IN DWORD dwProcessId,
  2583.     OUT LPWSAPROTOCOL_INFOA lpProtocolInfo
  2584.     );
  2585. typedef
  2586. int
  2587. (WSAAPI * LPFN_WSADUPLICATESOCKETW)(
  2588.     IN SOCKET s,
  2589.     IN DWORD dwProcessId,
  2590.     OUT LPWSAPROTOCOL_INFOW lpProtocolInfo
  2591.     );
  2592. #ifdef UNICODE
  2593. #define LPFN_WSADUPLICATESOCKET  LPFN_WSADUPLICATESOCKETW
  2594. #else
  2595. #define LPFN_WSADUPLICATESOCKET  LPFN_WSADUPLICATESOCKETA
  2596. #endif // !UNICODE
  2597. #endif // INCL_WINSOCK_API_TYPEDEFS
  2598.  
  2599. #if INCL_WINSOCK_API_PROTOTYPES
  2600. WINSOCK_API_LINKAGE
  2601. int
  2602. WSAAPI
  2603. WSAEnumNetworkEvents(
  2604.     IN SOCKET s,
  2605.     IN WSAEVENT hEventObject,
  2606.     OUT LPWSANETWORKEVENTS lpNetworkEvents
  2607.     );
  2608. #endif // INCL_WINSOCK_API_PROTOTYPES
  2609.  
  2610. #if INCL_WINSOCK_API_TYPEDEFS
  2611. typedef
  2612. int
  2613. (WSAAPI * LPFN_WSAENUMNETWORKEVENTS)(
  2614.     IN SOCKET s,
  2615.     IN WSAEVENT hEventObject,
  2616.     OUT LPWSANETWORKEVENTS lpNetworkEvents
  2617.     );
  2618. #endif // INCL_WINSOCK_API_TYPEDEFS
  2619.  
  2620. #if INCL_WINSOCK_API_PROTOTYPES
  2621. WINSOCK_API_LINKAGE
  2622. int
  2623. WSAAPI
  2624. WSAEnumProtocolsA(
  2625.     IN LPINT lpiProtocols,
  2626.     OUT LPWSAPROTOCOL_INFOA lpProtocolBuffer,
  2627.     IN OUT LPDWORD lpdwBufferLength
  2628.     );
  2629. WINSOCK_API_LINKAGE
  2630. int
  2631. WSAAPI
  2632. WSAEnumProtocolsW(
  2633.     IN LPINT lpiProtocols,
  2634.     OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer,
  2635.     IN OUT LPDWORD lpdwBufferLength
  2636.     );
  2637. #ifdef UNICODE
  2638. #define WSAEnumProtocols  WSAEnumProtocolsW
  2639. #else
  2640. #define WSAEnumProtocols  WSAEnumProtocolsA
  2641. #endif // !UNICODE
  2642. #endif // INCL_WINSOCK_API_PROTOTYPES
  2643.  
  2644. #if INCL_WINSOCK_API_TYPEDEFS
  2645. typedef
  2646. int
  2647. (WSAAPI * LPFN_WSAENUMPROTOCOLSA)(
  2648.     IN LPINT lpiProtocols,
  2649.     OUT LPWSAPROTOCOL_INFOA lpProtocolBuffer,
  2650.     IN OUT LPDWORD lpdwBufferLength
  2651.     );
  2652. typedef
  2653. int
  2654. (WSAAPI * LPFN_WSAENUMPROTOCOLSW)(
  2655.     IN LPINT lpiProtocols,
  2656.     OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer,
  2657.     IN OUT LPDWORD lpdwBufferLength
  2658.     );
  2659. #ifdef UNICODE
  2660. #define LPFN_WSAENUMPROTOCOLS  LPFN_WSAENUMPROTOCOLSW
  2661. #else
  2662. #define LPFN_WSAENUMPROTOCOLS  LPFN_WSAENUMPROTOCOLSA
  2663. #endif // !UNICODE
  2664. #endif // INCL_WINSOCK_API_TYPEDEFS
  2665.  
  2666. #if INCL_WINSOCK_API_PROTOTYPES
  2667. WINSOCK_API_LINKAGE
  2668. int
  2669. WSAAPI
  2670. WSAEventSelect(
  2671.     IN SOCKET s,
  2672.     IN WSAEVENT hEventObject,
  2673.     IN long lNetworkEvents
  2674.     );
  2675. #endif // INCL_WINSOCK_API_PROTOTYPES
  2676.  
  2677. #if INCL_WINSOCK_API_TYPEDEFS
  2678. typedef
  2679. int
  2680. (WSAAPI * LPFN_WSAEVENTSELECT)(
  2681.     IN SOCKET s,
  2682.     IN WSAEVENT hEventObject,
  2683.     IN long lNetworkEvents
  2684.     );
  2685. #endif // INCL_WINSOCK_API_TYPEDEFS
  2686.  
  2687. #if INCL_WINSOCK_API_PROTOTYPES
  2688. WINSOCK_API_LINKAGE
  2689. BOOL
  2690. WSAAPI
  2691. WSAGetOverlappedResult(
  2692.     IN SOCKET s,
  2693.     IN LPWSAOVERLAPPED lpOverlapped,
  2694.     OUT LPDWORD lpcbTransfer,
  2695.     IN BOOL fWait,
  2696.     OUT LPDWORD lpdwFlags
  2697.     );
  2698. #endif // INCL_WINSOCK_API_PROTOTYPES
  2699.  
  2700. #if INCL_WINSOCK_API_TYPEDEFS
  2701. typedef
  2702. BOOL
  2703. (WSAAPI * LPFN_WSAGETOVERLAPPEDRESULT)(
  2704.     IN SOCKET s,
  2705.     IN LPWSAOVERLAPPED lpOverlapped,
  2706.     OUT LPDWORD lpcbTransfer,
  2707.     IN BOOL fWait,
  2708.     OUT LPDWORD lpdwFlags
  2709.     );
  2710. #endif // INCL_WINSOCK_API_TYPEDEFS
  2711.  
  2712. #if INCL_WINSOCK_API_PROTOTYPES
  2713. WINSOCK_API_LINKAGE
  2714. BOOL
  2715. WSAAPI
  2716. WSAGetQOSByName(
  2717.     IN SOCKET s,
  2718.     IN LPWSABUF lpQOSName,
  2719.     OUT LPQOS lpQOS
  2720.     );
  2721. #endif // INCL_WINSOCK_API_PROTOTYPES
  2722.  
  2723. #if INCL_WINSOCK_API_TYPEDEFS
  2724. typedef
  2725. BOOL
  2726. (WSAAPI * LPFN_WSAGETQOSBYNAME)(
  2727.     IN SOCKET s,
  2728.     IN LPWSABUF lpQOSName,
  2729.     OUT LPQOS lpQOS
  2730.     );
  2731. #endif // INCL_WINSOCK_API_TYPEDEFS
  2732.  
  2733. #if INCL_WINSOCK_API_PROTOTYPES
  2734. WINSOCK_API_LINKAGE
  2735. int
  2736. WSAAPI
  2737. WSAHtonl(
  2738.     IN SOCKET s,
  2739.     IN u_long hostlong,
  2740.     OUT u_long FAR * lpnetlong
  2741.     );
  2742. #endif // INCL_WINSOCK_API_PROTOTYPES
  2743.  
  2744. #if INCL_WINSOCK_API_TYPEDEFS
  2745. typedef
  2746. int
  2747. (WSAAPI * LPFN_WSAHTONL)(
  2748.     IN SOCKET s,
  2749.     IN u_long hostlong,
  2750.     OUT u_long FAR * lpnetlong
  2751.     );
  2752. #endif // INCL_WINSOCK_API_TYPEDEFS
  2753.  
  2754. #if INCL_WINSOCK_API_PROTOTYPES
  2755. WINSOCK_API_LINKAGE
  2756. int
  2757. WSAAPI
  2758. WSAHtons(
  2759.     IN SOCKET s,
  2760.     IN u_short hostshort,
  2761.     OUT u_short FAR * lpnetshort
  2762.     );
  2763. #endif // INCL_WINSOCK_API_PROTOTYPES
  2764.  
  2765. #if INCL_WINSOCK_API_TYPEDEFS
  2766. typedef
  2767. int
  2768. (WSAAPI * LPFN_WSAHTONS)(
  2769.     IN SOCKET s,
  2770.     IN u_short hostshort,
  2771.     OUT u_short FAR * lpnetshort
  2772.     );
  2773. #endif // INCL_WINSOCK_API_TYPEDEFS
  2774.  
  2775. #if INCL_WINSOCK_API_PROTOTYPES
  2776. WINSOCK_API_LINKAGE
  2777. int
  2778. WSAAPI
  2779. WSAIoctl(
  2780.     IN SOCKET s,
  2781.     IN DWORD dwIoControlCode,
  2782.     IN LPVOID lpvInBuffer,
  2783.     IN DWORD cbInBuffer,
  2784.     OUT LPVOID lpvOutBuffer,
  2785.     IN DWORD cbOutBuffer,
  2786.     OUT LPDWORD lpcbBytesReturned,
  2787.     IN LPWSAOVERLAPPED lpOverlapped,
  2788.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  2789.     );
  2790. #endif // INCL_WINSOCK_API_PROTOTYPES
  2791.  
  2792. #if INCL_WINSOCK_API_TYPEDEFS
  2793. typedef
  2794. int
  2795. (WSAAPI * LPFN_WSAIOCTL)(
  2796.     IN SOCKET s,
  2797.     IN DWORD dwIoControlCode,
  2798.     IN LPVOID lpvInBuffer,
  2799.     IN DWORD cbInBuffer,
  2800.     OUT LPVOID lpvOutBuffer,
  2801.     IN DWORD cbOutBuffer,
  2802.     OUT LPDWORD lpcbBytesReturned,
  2803.     IN LPWSAOVERLAPPED lpOverlapped,
  2804.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  2805.     );
  2806. #endif // INCL_WINSOCK_API_TYPEDEFS
  2807.  
  2808. #if INCL_WINSOCK_API_PROTOTYPES
  2809. WINSOCK_API_LINKAGE
  2810. SOCKET
  2811. WSAAPI
  2812. WSAJoinLeaf(
  2813.     IN SOCKET s,
  2814.     IN const struct sockaddr FAR * name,
  2815.     IN int namelen,
  2816.     IN LPWSABUF lpCallerData,
  2817.     OUT LPWSABUF lpCalleeData,
  2818.     IN LPQOS lpSQOS,
  2819.     IN LPQOS lpGQOS,
  2820.     IN DWORD dwFlags
  2821.     );
  2822. #endif // INCL_WINSOCK_API_PROTOTYPES
  2823.  
  2824. #if INCL_WINSOCK_API_TYPEDEFS
  2825. typedef
  2826. SOCKET
  2827. (WSAAPI * LPFN_WSAJOINLEAF)(
  2828.     IN SOCKET s,
  2829.     IN const struct sockaddr FAR * name,
  2830.     IN int namelen,
  2831.     IN LPWSABUF lpCallerData,
  2832.     OUT LPWSABUF lpCalleeData,
  2833.     IN LPQOS lpSQOS,
  2834.     IN LPQOS lpGQOS,
  2835.     IN DWORD dwFlags
  2836.     );
  2837. #endif // INCL_WINSOCK_API_TYPEDEFS
  2838.  
  2839. #if INCL_WINSOCK_API_PROTOTYPES
  2840. WINSOCK_API_LINKAGE
  2841. int
  2842. WSAAPI
  2843. WSANtohl(
  2844.     IN SOCKET s,
  2845.     IN u_long netlong,
  2846.     OUT u_long FAR * lphostlong
  2847.     );
  2848. #endif // INCL_WINSOCK_API_PROTOTYPES
  2849.  
  2850. #if INCL_WINSOCK_API_TYPEDEFS
  2851. typedef
  2852. int
  2853. (WSAAPI * LPFN_WSANTOHL)(
  2854.     IN SOCKET s,
  2855.     IN u_long netlong,
  2856.     OUT u_long FAR * lphostlong
  2857.     );
  2858. #endif // INCL_WINSOCK_API_TYPEDEFS
  2859.  
  2860. #if INCL_WINSOCK_API_PROTOTYPES
  2861. WINSOCK_API_LINKAGE
  2862. int
  2863. WSAAPI
  2864. WSANtohs(
  2865.     IN SOCKET s,
  2866.     IN u_short netshort,
  2867.     OUT u_short FAR * lphostshort
  2868.     );
  2869. #endif // INCL_WINSOCK_API_PROTOTYPES
  2870.  
  2871. #if INCL_WINSOCK_API_TYPEDEFS
  2872. typedef
  2873. int
  2874. (WSAAPI * LPFN_WSANTOHS)(
  2875.     IN SOCKET s,
  2876.     IN u_short netshort,
  2877.     OUT u_short FAR * lphostshort
  2878.     );
  2879. #endif // INCL_WINSOCK_API_TYPEDEFS
  2880.  
  2881. #if INCL_WINSOCK_API_PROTOTYPES
  2882. WINSOCK_API_LINKAGE
  2883. int
  2884. WSAAPI
  2885. WSARecv(
  2886.     IN SOCKET s,
  2887.     IN OUT LPWSABUF lpBuffers,
  2888.     IN DWORD dwBufferCount,
  2889.     OUT LPDWORD lpNumberOfBytesRecvd,
  2890.     IN OUT LPDWORD lpFlags,
  2891.     IN LPWSAOVERLAPPED lpOverlapped,
  2892.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  2893.     );
  2894. #endif // INCL_WINSOCK_API_PROTOTYPES
  2895.  
  2896. #if INCL_WINSOCK_API_TYPEDEFS
  2897. typedef
  2898. int
  2899. (WSAAPI * LPFN_WSARECV)(
  2900.     IN SOCKET s,
  2901.     IN OUT LPWSABUF lpBuffers,
  2902.     IN DWORD dwBufferCount,
  2903.     OUT LPDWORD lpNumberOfBytesRecvd,
  2904.     IN OUT LPDWORD lpFlags,
  2905.     IN LPWSAOVERLAPPED lpOverlapped,
  2906.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  2907.     );
  2908. #endif // INCL_WINSOCK_API_TYPEDEFS
  2909.  
  2910. #if INCL_WINSOCK_API_PROTOTYPES
  2911. WINSOCK_API_LINKAGE
  2912. int
  2913. WSAAPI
  2914. WSARecvDisconnect(
  2915.     IN SOCKET s,
  2916.     OUT LPWSABUF lpInboundDisconnectData
  2917.     );
  2918. #endif // INCL_WINSOCK_API_PROTOTYPES
  2919.  
  2920. #if INCL_WINSOCK_API_TYPEDEFS
  2921. typedef
  2922. int
  2923. (WSAAPI * LPFN_WSARECVDISCONNECT)(
  2924.     IN SOCKET s,
  2925.     OUT LPWSABUF lpInboundDisconnectData
  2926.     );
  2927. #endif // INCL_WINSOCK_API_TYPEDEFS
  2928.  
  2929. #if INCL_WINSOCK_API_PROTOTYPES
  2930. WINSOCK_API_LINKAGE
  2931. int
  2932. WSAAPI
  2933. WSARecvFrom(
  2934.     IN SOCKET s,
  2935.     IN OUT LPWSABUF lpBuffers,
  2936.     IN DWORD dwBufferCount,
  2937.     OUT LPDWORD lpNumberOfBytesRecvd,
  2938.     IN OUT LPDWORD lpFlags,
  2939.     OUT struct sockaddr FAR * lpFrom,
  2940.     IN OUT LPINT lpFromlen,
  2941.     IN LPWSAOVERLAPPED lpOverlapped,
  2942.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  2943.     );
  2944. #endif // INCL_WINSOCK_API_PROTOTYPES
  2945.  
  2946. #if INCL_WINSOCK_API_TYPEDEFS
  2947. typedef
  2948. int
  2949. (WSAAPI * LPFN_WSARECVFROM)(
  2950.     IN SOCKET s,
  2951.     IN OUT LPWSABUF lpBuffers,
  2952.     IN DWORD dwBufferCount,
  2953.     OUT LPDWORD lpNumberOfBytesRecvd,
  2954.     IN OUT LPDWORD lpFlags,
  2955.     OUT struct sockaddr FAR * lpFrom,
  2956.     IN OUT LPINT lpFromlen,
  2957.     IN LPWSAOVERLAPPED lpOverlapped,
  2958.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  2959.     );
  2960. #endif // INCL_WINSOCK_API_TYPEDEFS
  2961.  
  2962. #if INCL_WINSOCK_API_PROTOTYPES
  2963. WINSOCK_API_LINKAGE
  2964. BOOL
  2965. WSAAPI
  2966. WSAResetEvent(
  2967.     IN WSAEVENT hEvent
  2968.     );
  2969. #endif // INCL_WINSOCK_API_PROTOTYPES
  2970.  
  2971. #if INCL_WINSOCK_API_TYPEDEFS
  2972. typedef
  2973. BOOL
  2974. (WSAAPI * LPFN_WSARESETEVENT)(
  2975.     IN WSAEVENT hEvent
  2976.     );
  2977. #endif // INCL_WINSOCK_API_TYPEDEFS
  2978.  
  2979. #if INCL_WINSOCK_API_PROTOTYPES
  2980. WINSOCK_API_LINKAGE
  2981. int
  2982. WSAAPI
  2983. WSASend(
  2984.     IN SOCKET s,
  2985.     IN LPWSABUF lpBuffers,
  2986.     IN DWORD dwBufferCount,
  2987.     OUT LPDWORD lpNumberOfBytesSent,
  2988.     IN DWORD dwFlags,
  2989.     IN LPWSAOVERLAPPED lpOverlapped,
  2990.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  2991.     );
  2992. #endif // INCL_WINSOCK_API_PROTOTYPES
  2993.  
  2994. #if INCL_WINSOCK_API_TYPEDEFS
  2995. typedef
  2996. int
  2997. (WSAAPI * LPFN_WSASEND)(
  2998.     IN SOCKET s,
  2999.     IN LPWSABUF lpBuffers,
  3000.     IN DWORD dwBufferCount,
  3001.     OUT LPDWORD lpNumberOfBytesSent,
  3002.     IN DWORD dwFlags,
  3003.     IN LPWSAOVERLAPPED lpOverlapped,
  3004.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  3005.     );
  3006. #endif // INCL_WINSOCK_API_TYPEDEFS
  3007.  
  3008. #if INCL_WINSOCK_API_PROTOTYPES
  3009. WINSOCK_API_LINKAGE
  3010. int
  3011. WSAAPI
  3012. WSASendDisconnect(
  3013.     IN SOCKET s,
  3014.     IN LPWSABUF lpOutboundDisconnectData
  3015.     );
  3016. #endif // INCL_WINSOCK_API_PROTOTYPES
  3017.  
  3018. #if INCL_WINSOCK_API_TYPEDEFS
  3019. typedef
  3020. int
  3021. (WSAAPI * LPFN_WSASENDDISCONNECT)(
  3022.     IN SOCKET s,
  3023.     IN LPWSABUF lpOutboundDisconnectData
  3024.     );
  3025. #endif // INCL_WINSOCK_API_TYPEDEFS
  3026.  
  3027. #if INCL_WINSOCK_API_PROTOTYPES
  3028. WINSOCK_API_LINKAGE
  3029. int
  3030. WSAAPI
  3031. WSASendTo(
  3032.     IN SOCKET s,
  3033.     IN LPWSABUF lpBuffers,
  3034.     IN DWORD dwBufferCount,
  3035.     OUT LPDWORD lpNumberOfBytesSent,
  3036.     IN DWORD dwFlags,
  3037.     IN const struct sockaddr FAR * lpTo,
  3038.     IN int iTolen,
  3039.     IN LPWSAOVERLAPPED lpOverlapped,
  3040.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  3041.     );
  3042. #endif // INCL_WINSOCK_API_PROTOTYPES
  3043.  
  3044. #if INCL_WINSOCK_API_TYPEDEFS
  3045. typedef
  3046. int
  3047. (WSAAPI * LPFN_WSASENDTO)(
  3048.     IN SOCKET s,
  3049.     IN LPWSABUF lpBuffers,
  3050.     IN DWORD dwBufferCount,
  3051.     OUT LPDWORD lpNumberOfBytesSent,
  3052.     IN DWORD dwFlags,
  3053.     IN const struct sockaddr FAR * lpTo,
  3054.     IN int iTolen,
  3055.     IN LPWSAOVERLAPPED lpOverlapped,
  3056.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  3057.     );
  3058. #endif // INCL_WINSOCK_API_TYPEDEFS
  3059.  
  3060. #if INCL_WINSOCK_API_PROTOTYPES
  3061. WINSOCK_API_LINKAGE
  3062. BOOL
  3063. WSAAPI
  3064. WSASetEvent(
  3065.     IN WSAEVENT hEvent
  3066.     );
  3067. #endif // INCL_WINSOCK_API_PROTOTYPES
  3068.  
  3069. #if INCL_WINSOCK_API_TYPEDEFS
  3070. typedef
  3071. BOOL
  3072. (WSAAPI * LPFN_WSASETEVENT)(
  3073.     IN WSAEVENT hEvent
  3074.     );
  3075. #endif // INCL_WINSOCK_API_TYPEDEFS
  3076.  
  3077. #if INCL_WINSOCK_API_PROTOTYPES
  3078. WINSOCK_API_LINKAGE
  3079. SOCKET
  3080. WSAAPI
  3081. WSASocketA(
  3082.     IN int af,
  3083.     IN int type,
  3084.     IN int protocol,
  3085.     IN LPWSAPROTOCOL_INFOA lpProtocolInfo,
  3086.     IN GROUP g,
  3087.     IN DWORD dwFlags
  3088.     );
  3089. WINSOCK_API_LINKAGE
  3090. SOCKET
  3091. WSAAPI
  3092. WSASocketW(
  3093.     IN int af,
  3094.     IN int type,
  3095.     IN int protocol,
  3096.     IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
  3097.     IN GROUP g,
  3098.     IN DWORD dwFlags
  3099.     );
  3100. #ifdef UNICODE
  3101. #define WSASocket  WSASocketW
  3102. #else
  3103. #define WSASocket  WSASocketA
  3104. #endif // !UNICODE
  3105. #endif // INCL_WINSOCK_API_PROTOTYPES
  3106.  
  3107. #if INCL_WINSOCK_API_TYPEDEFS
  3108. typedef
  3109. SOCKET
  3110. (WSAAPI * LPFN_WSASOCKETA)(
  3111.     IN int af,
  3112.     IN int type,
  3113.     IN int protocol,
  3114.     IN LPWSAPROTOCOL_INFOA lpProtocolInfo,
  3115.     IN GROUP g,
  3116.     IN DWORD dwFlags
  3117.     );
  3118. typedef
  3119. SOCKET
  3120. (WSAAPI * LPFN_WSASOCKETW)(
  3121.     IN int af,
  3122.     IN int type,
  3123.     IN int protocol,
  3124.     IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
  3125.     IN GROUP g,
  3126.     IN DWORD dwFlags
  3127.     );
  3128. #ifdef UNICODE
  3129. #define LPFN_WSASOCKET  LPFN_WSASOCKETW
  3130. #else
  3131. #define LPFN_WSASOCKET  LPFN_WSASOCKETA
  3132. #endif // !UNICODE
  3133. #endif // INCL_WINSOCK_API_TYPEDEFS
  3134.  
  3135. #if INCL_WINSOCK_API_PROTOTYPES
  3136. WINSOCK_API_LINKAGE
  3137. DWORD
  3138. WSAAPI
  3139. WSAWaitForMultipleEvents(
  3140.     IN DWORD cEvents,
  3141.     IN const WSAEVENT FAR * lphEvents,
  3142.     IN BOOL fWaitAll,
  3143.     IN DWORD dwTimeout,
  3144.     IN BOOL fAlertable
  3145.     );
  3146. #endif // INCL_WINSOCK_API_PROTOTYPES
  3147.  
  3148. #if INCL_WINSOCK_API_TYPEDEFS
  3149. typedef
  3150. DWORD
  3151. (WSAAPI * LPFN_WSAWAITFORMULTIPLEEVENTS)(
  3152.     IN DWORD cEvents,
  3153.     IN const WSAEVENT FAR * lphEvents,
  3154.     IN BOOL fWaitAll,
  3155.     IN DWORD dwTimeout,
  3156.     IN BOOL fAlertable
  3157.     );
  3158. #endif // INCL_WINSOCK_API_TYPEDEFS
  3159.  
  3160. #if INCL_WINSOCK_API_PROTOTYPES
  3161. WINSOCK_API_LINKAGE
  3162. INT
  3163. WSAAPI
  3164. WSAAddressToStringA(
  3165.     IN     LPSOCKADDR          lpsaAddress,
  3166.     IN     DWORD               dwAddressLength,
  3167.     IN     LPWSAPROTOCOL_INFOA lpProtocolInfo,
  3168.     IN OUT LPSTR             lpszAddressString,
  3169.     IN OUT LPDWORD             lpdwAddressStringLength
  3170.     );
  3171. WINSOCK_API_LINKAGE
  3172. INT
  3173. WSAAPI
  3174. WSAAddressToStringW(
  3175.     IN     LPSOCKADDR          lpsaAddress,
  3176.     IN     DWORD               dwAddressLength,
  3177.     IN     LPWSAPROTOCOL_INFOW lpProtocolInfo,
  3178.     IN OUT LPWSTR             lpszAddressString,
  3179.     IN OUT LPDWORD             lpdwAddressStringLength
  3180.     );
  3181. #ifdef UNICODE
  3182. #define WSAAddressToString  WSAAddressToStringW
  3183. #else
  3184. #define WSAAddressToString  WSAAddressToStringA
  3185. #endif // !UNICODE
  3186. #endif // INCL_WINSOCK_API_PROTOTYPES
  3187.  
  3188. #if INCL_WINSOCK_API_TYPEDEFS
  3189. typedef
  3190. INT
  3191. (WSAAPI * LPFN_WSAADDRESSTOSTRINGA)(
  3192.     IN     LPSOCKADDR          lpsaAddress,
  3193.     IN     DWORD               dwAddressLength,
  3194.     IN     LPWSAPROTOCOL_INFOA lpProtocolInfo,
  3195.     IN OUT LPSTR             lpszAddressString,
  3196.     IN OUT LPDWORD             lpdwAddressStringLength
  3197.     );
  3198. typedef
  3199. INT
  3200. (WSAAPI * LPFN_WSAADDRESSTOSTRINGW)(
  3201.     IN     LPSOCKADDR          lpsaAddress,
  3202.     IN     DWORD               dwAddressLength,
  3203.     IN     LPWSAPROTOCOL_INFOW lpProtocolInfo,
  3204.     IN OUT LPWSTR             lpszAddressString,
  3205.     IN OUT LPDWORD             lpdwAddressStringLength
  3206.     );
  3207. #ifdef UNICODE
  3208. #define LPFN_WSAADDRESSTOSTRING  LPFN_WSAADDRESSTOSTRINGW
  3209. #else
  3210. #define LPFN_WSAADDRESSTOSTRING  LPFN_WSAADDRESSTOSTRINGA
  3211. #endif // !UNICODE
  3212. #endif // INCL_WINSOCK_API_TYPEDEFS
  3213.  
  3214. #if INCL_WINSOCK_API_PROTOTYPES
  3215. WINSOCK_API_LINKAGE
  3216. INT
  3217. WSAAPI
  3218. WSAStringToAddressA(
  3219.     IN     LPSTR               AddressString,
  3220.     IN     INT                 AddressFamily,
  3221.     IN     LPWSAPROTOCOL_INFOA lpProtocolInfo,
  3222.     OUT    LPSOCKADDR          lpAddress,
  3223.     IN OUT LPINT               lpAddressLength
  3224.     );
  3225. WINSOCK_API_LINKAGE
  3226. INT
  3227. WSAAPI
  3228. WSAStringToAddressW(
  3229.     IN     LPWSTR              AddressString,
  3230.     IN     INT                 AddressFamily,
  3231.     IN     LPWSAPROTOCOL_INFOW lpProtocolInfo,
  3232.     OUT    LPSOCKADDR          lpAddress,
  3233.     IN OUT LPINT               lpAddressLength
  3234.     );
  3235. #ifdef UNICODE
  3236. #define WSAStringToAddress  WSAStringToAddressW
  3237. #else
  3238. #define WSAStringToAddress  WSAStringToAddressA
  3239. #endif // !UNICODE
  3240. #endif // INCL_WINSOCK_API_PROTOTYPES
  3241.  
  3242. #if INCL_WINSOCK_API_TYPEDEFS
  3243. typedef
  3244. INT
  3245. (WSAAPI * LPFN_WSASTRINGTOADDRESSA)(
  3246.     IN     LPSTR               AddressString,
  3247.     IN     INT                 AddressFamily,
  3248.     IN     LPWSAPROTOCOL_INFOA lpProtocolInfo,
  3249.     OUT    LPSOCKADDR          lpAddress,
  3250.     IN OUT LPINT               lpAddressLength
  3251.     );
  3252. typedef
  3253. INT
  3254. (WSAAPI * LPFN_WSASTRINGTOADDRESSW)(
  3255.     IN     LPWSTR              AddressString,
  3256.     IN     INT                 AddressFamily,
  3257.     IN     LPWSAPROTOCOL_INFOW lpProtocolInfo,
  3258.     OUT    LPSOCKADDR          lpAddress,
  3259.     IN OUT LPINT               lpAddressLength
  3260.     );
  3261. #ifdef UNICODE
  3262. #define LPFN_WSASTRINGTOADDRESS  LPFN_WSASTRINGTOADDRESSW
  3263. #else
  3264. #define LPFN_WSASTRINGTOADDRESS  LPFN_WSASTRINGTOADDRESSA
  3265. #endif // !UNICODE
  3266. #endif // INCL_WINSOCK_API_TYPEDEFS
  3267.  
  3268. /* Registration and Name Resolution API functions */
  3269.  
  3270.  
  3271. #if INCL_WINSOCK_API_PROTOTYPES
  3272. WINSOCK_API_LINKAGE
  3273. INT
  3274. WSAAPI
  3275. WSALookupServiceBeginA(
  3276.     IN  LPWSAQUERYSETA lpqsRestrictions,
  3277.     IN  DWORD          dwControlFlags,
  3278.     OUT LPHANDLE       lphLookup
  3279.     );
  3280. WINSOCK_API_LINKAGE
  3281. INT
  3282. WSAAPI
  3283. WSALookupServiceBeginW(
  3284.     IN  LPWSAQUERYSETW lpqsRestrictions,
  3285.     IN  DWORD          dwControlFlags,
  3286.     OUT LPHANDLE       lphLookup
  3287.     );
  3288. #ifdef UNICODE
  3289. #define WSALookupServiceBegin  WSALookupServiceBeginW
  3290. #else
  3291. #define WSALookupServiceBegin  WSALookupServiceBeginA
  3292. #endif // !UNICODE
  3293. #endif // INCL_WINSOCK_API_PROTOTYPES
  3294.  
  3295. #if INCL_WINSOCK_API_TYPEDEFS
  3296. typedef
  3297. INT
  3298. (WSAAPI * LPFN_WSALOOKUPSERVICEBEGINA)(
  3299.     IN  LPWSAQUERYSETA lpqsRestrictions,
  3300.     IN  DWORD          dwControlFlags,
  3301.     OUT LPHANDLE       lphLookup
  3302.     );
  3303. typedef
  3304. INT
  3305. (WSAAPI * LPFN_WSALOOKUPSERVICEBEGINW)(
  3306.     IN  LPWSAQUERYSETW lpqsRestrictions,
  3307.     IN  DWORD          dwControlFlags,
  3308.     OUT LPHANDLE       lphLookup
  3309.     );
  3310. #ifdef UNICODE
  3311. #define LPFN_WSALOOKUPSERVICEBEGIN  LPFN_WSALOOKUPSERVICEBEGINW
  3312. #else
  3313. #define LPFN_WSALOOKUPSERVICEBEGIN  LPFN_WSALOOKUPSERVICEBEGINA
  3314. #endif // !UNICODE
  3315. #endif // INCL_WINSOCK_API_TYPEDEFS
  3316.  
  3317. #if INCL_WINSOCK_API_PROTOTYPES
  3318. WINSOCK_API_LINKAGE
  3319. INT
  3320. WSAAPI
  3321. WSALookupServiceNextA(
  3322.     IN     HANDLE           hLookup,
  3323.     IN     DWORD            dwControlFlags,
  3324.     IN OUT LPDWORD          lpdwBufferLength,
  3325.     OUT    LPWSAQUERYSETA   lpqsResults
  3326.     );
  3327. WINSOCK_API_LINKAGE
  3328. INT
  3329. WSAAPI
  3330. WSALookupServiceNextW(
  3331.     IN     HANDLE           hLookup,
  3332.     IN     DWORD            dwControlFlags,
  3333.     IN OUT LPDWORD          lpdwBufferLength,
  3334.     OUT    LPWSAQUERYSETW   lpqsResults
  3335.     );
  3336. #ifdef UNICODE
  3337. #define WSALookupServiceNext  WSALookupServiceNextW
  3338. #else
  3339. #define WSALookupServiceNext  WSALookupServiceNextA
  3340. #endif // !UNICODE
  3341. #endif // INCL_WINSOCK_API_PROTOTYPES
  3342.  
  3343. #if INCL_WINSOCK_API_TYPEDEFS
  3344. typedef
  3345. INT
  3346. (WSAAPI * LPFN_WSALOOKUPSERVICENEXTA)(
  3347.     IN     HANDLE           hLookup,
  3348.     IN     DWORD            dwControlFlags,
  3349.     IN OUT LPDWORD          lpdwBufferLength,
  3350.     OUT    LPWSAQUERYSETA   lpqsResults
  3351.     );
  3352. typedef
  3353. INT
  3354. (WSAAPI * LPFN_WSALOOKUPSERVICENEXTW)(
  3355.     IN     HANDLE           hLookup,
  3356.     IN     DWORD            dwControlFlags,
  3357.     IN OUT LPDWORD          lpdwBufferLength,
  3358.     OUT    LPWSAQUERYSETW   lpqsResults
  3359.     );
  3360. #ifdef UNICODE
  3361. #define LPFN_WSALOOKUPSERVICENEXT  LPFN_WSALOOKUPSERVICENEXTW
  3362. #else
  3363. #define LPFN_WSALOOKUPSERVICENEXT  LPFN_WSALOOKUPSERVICENEXTA
  3364. #endif // !UNICODE
  3365. #endif // INCL_WINSOCK_API_TYPEDEFS
  3366.  
  3367. #if INCL_WINSOCK_API_PROTOTYPES
  3368. WINSOCK_API_LINKAGE
  3369. INT
  3370. WSAAPI
  3371. WSALookupServiceEnd(
  3372.     IN HANDLE  hLookup
  3373.     );
  3374. #endif // INCL_WINSOCK_API_PROTOTYPES
  3375.  
  3376. #if INCL_WINSOCK_API_TYPEDEFS
  3377. typedef
  3378. INT
  3379. (WSAAPI * LPFN_WSALOOKUPSERVICEEND)(
  3380.     IN HANDLE  hLookup
  3381.     );
  3382. #endif // INCL_WINSOCK_API_TYPEDEFS
  3383.  
  3384. #if INCL_WINSOCK_API_PROTOTYPES
  3385. WINSOCK_API_LINKAGE
  3386. INT
  3387. WSAAPI
  3388. WSAInstallServiceClassA(
  3389.     IN  LPWSASERVICECLASSINFOA   lpServiceClassInfo
  3390.     );
  3391. WINSOCK_API_LINKAGE
  3392. INT
  3393. WSAAPI
  3394. WSAInstallServiceClassW(
  3395.     IN  LPWSASERVICECLASSINFOW   lpServiceClassInfo
  3396.     );
  3397. #ifdef UNICODE
  3398. #define WSAInstallServiceClass  WSAInstallServiceClassW
  3399. #else
  3400. #define WSAInstallServiceClass  WSAInstallServiceClassA
  3401. #endif // !UNICODE
  3402. #endif // INCL_WINSOCK_API_PROTOTYPES
  3403.  
  3404. #if INCL_WINSOCK_API_TYPEDEFS
  3405. typedef
  3406. INT
  3407. (WSAAPI * LPFN_WSAINSTALLSERVICECLASSA)(
  3408.     IN  LPWSASERVICECLASSINFOA   lpServiceClassInfo
  3409.     );
  3410. typedef
  3411. INT
  3412. (WSAAPI * LPFN_WSAINSTALLSERVICECLASSW)(
  3413.     IN  LPWSASERVICECLASSINFOW   lpServiceClassInfo
  3414.     );
  3415. #ifdef UNICODE
  3416. #define LPFN_WSAINSTALLSERVICECLASS  LPFN_WSAINSTALLSERVICECLASSW
  3417. #else
  3418. #define LPFN_WSAINSTALLSERVICECLASS  LPFN_WSAINSTALLSERVICECLASSA
  3419. #endif // !UNICODE
  3420. #endif // INCL_WINSOCK_API_TYPEDEFS
  3421.  
  3422. #if INCL_WINSOCK_API_PROTOTYPES
  3423. WINSOCK_API_LINKAGE
  3424. INT
  3425. WSAAPI
  3426. WSARemoveServiceClass(
  3427.     IN  LPGUID  lpServiceClassId
  3428.     );
  3429. #endif // INCL_WINSOCK_API_PROTOTYPES
  3430.  
  3431. #if INCL_WINSOCK_API_TYPEDEFS
  3432. typedef
  3433. INT
  3434. (WSAAPI * LPFN_WSAREMOVESERVICECLASS)(
  3435.     IN  LPGUID  lpServiceClassId
  3436.     );
  3437. #endif // INCL_WINSOCK_API_TYPEDEFS
  3438.  
  3439. #if INCL_WINSOCK_API_PROTOTYPES
  3440. WINSOCK_API_LINKAGE
  3441. INT
  3442. WSAAPI
  3443. WSAGetServiceClassInfoA(
  3444.     IN  LPGUID  lpProviderId,
  3445.     IN  LPGUID  lpServiceClassId,
  3446.     IN OUT LPDWORD  lpdwBufSize,
  3447.     OUT LPWSASERVICECLASSINFOA lpServiceClassInfo
  3448.     );
  3449. WINSOCK_API_LINKAGE
  3450. INT
  3451. WSAAPI
  3452. WSAGetServiceClassInfoW(
  3453.     IN  LPGUID  lpProviderId,
  3454.     IN  LPGUID  lpServiceClassId,
  3455.     IN OUT LPDWORD  lpdwBufSize,
  3456.     OUT LPWSASERVICECLASSINFOW lpServiceClassInfo
  3457.     );
  3458. #ifdef UNICODE
  3459. #define WSAGetServiceClassInfo  WSAGetServiceClassInfoW
  3460. #else
  3461. #define WSAGetServiceClassInfo  WSAGetServiceClassInfoA
  3462. #endif // !UNICODE
  3463. #endif // INCL_WINSOCK_API_PROTOTYPES
  3464.  
  3465. #if INCL_WINSOCK_API_TYPEDEFS
  3466. typedef
  3467. INT
  3468. (WSAAPI * LPFN_WSAGETSERVICECLASSINFOA)(
  3469.     IN  LPGUID  lpProviderId,
  3470.     IN  LPGUID  lpServiceClassId,
  3471.     IN OUT LPDWORD  lpdwBufSize,
  3472.     OUT LPWSASERVICECLASSINFOA lpServiceClassInfo
  3473.     );
  3474. typedef
  3475. INT
  3476. (WSAAPI * LPFN_WSAGETSERVICECLASSINFOW)(
  3477.     IN  LPGUID  lpProviderId,
  3478.     IN  LPGUID  lpServiceClassId,
  3479.     IN OUT LPDWORD  lpdwBufSize,
  3480.     OUT LPWSASERVICECLASSINFOW lpServiceClassInfo
  3481.     );
  3482. #ifdef UNICODE
  3483. #define LPFN_WSAGETSERVICECLASSINFO  LPFN_WSAGETSERVICECLASSINFOW
  3484. #else
  3485. #define LPFN_WSAGETSERVICECLASSINFO  LPFN_WSAGETSERVICECLASSINFOA
  3486. #endif // !UNICODE
  3487. #endif // INCL_WINSOCK_API_TYPEDEFS
  3488.  
  3489. #if INCL_WINSOCK_API_PROTOTYPES
  3490. WINSOCK_API_LINKAGE
  3491. INT
  3492. WSAAPI
  3493. WSAEnumNameSpaceProvidersA(
  3494.     IN OUT LPDWORD              lpdwBufferLength,
  3495.     OUT    LPWSANAMESPACE_INFOA lpnspBuffer
  3496.     );
  3497. WINSOCK_API_LINKAGE
  3498. INT
  3499. WSAAPI
  3500. WSAEnumNameSpaceProvidersW(
  3501.     IN OUT LPDWORD              lpdwBufferLength,
  3502.     OUT    LPWSANAMESPACE_INFOW lpnspBuffer
  3503.     );
  3504. #ifdef UNICODE
  3505. #define WSAEnumNameSpaceProviders  WSAEnumNameSpaceProvidersW
  3506. #else
  3507. #define WSAEnumNameSpaceProviders  WSAEnumNameSpaceProvidersA
  3508. #endif // !UNICODE
  3509. #endif // INCL_WINSOCK_API_PROTOTYPES
  3510.  
  3511. #if INCL_WINSOCK_API_TYPEDEFS
  3512. typedef
  3513. INT
  3514. (WSAAPI * LPFN_WSAENUMNAMESPACEPROVIDERSA)(
  3515.     IN OUT LPDWORD              lpdwBufferLength,
  3516.     OUT    LPWSANAMESPACE_INFOA lpnspBuffer
  3517.     );
  3518. typedef
  3519. INT
  3520. (WSAAPI * LPFN_WSAENUMNAMESPACEPROVIDERSW)(
  3521.     IN OUT LPDWORD              lpdwBufferLength,
  3522.     OUT    LPWSANAMESPACE_INFOW lpnspBuffer
  3523.     );
  3524. #ifdef UNICODE
  3525. #define LPFN_WSAENUMNAMESPACEPROVIDERS  LPFN_WSAENUMNAMESPACEPROVIDERSW
  3526. #else
  3527. #define LPFN_WSAENUMNAMESPACEPROVIDERS  LPFN_WSAENUMNAMESPACEPROVIDERSA
  3528. #endif // !UNICODE
  3529. #endif // INCL_WINSOCK_API_TYPEDEFS
  3530.  
  3531. #if INCL_WINSOCK_API_PROTOTYPES
  3532. WINSOCK_API_LINKAGE
  3533. INT
  3534. WSAAPI
  3535. WSAGetServiceClassNameByClassIdA(
  3536.     IN      LPGUID  lpServiceClassId,
  3537.     OUT     LPSTR lpszServiceClassName,
  3538.     IN OUT  LPDWORD lpdwBufferLength
  3539.     );
  3540. WINSOCK_API_LINKAGE
  3541. INT
  3542. WSAAPI
  3543. WSAGetServiceClassNameByClassIdW(
  3544.     IN      LPGUID  lpServiceClassId,
  3545.     OUT     LPWSTR lpszServiceClassName,
  3546.     IN OUT  LPDWORD lpdwBufferLength
  3547.     );
  3548. #ifdef UNICODE
  3549. #define WSAGetServiceClassNameByClassId  WSAGetServiceClassNameByClassIdW
  3550. #else
  3551. #define WSAGetServiceClassNameByClassId  WSAGetServiceClassNameByClassIdA
  3552. #endif // !UNICODE
  3553. #endif // INCL_WINSOCK_API_PROTOTYPES
  3554.  
  3555. #if INCL_WINSOCK_API_TYPEDEFS
  3556. typedef
  3557. INT
  3558. (WSAAPI * LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(
  3559.     IN      LPGUID  lpServiceClassId,
  3560.     OUT     LPSTR lpszServiceClassName,
  3561.     IN OUT  LPDWORD lpdwBufferLength
  3562.     );
  3563. typedef
  3564. INT
  3565. (WSAAPI * LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(
  3566.     IN      LPGUID  lpServiceClassId,
  3567.     OUT     LPWSTR lpszServiceClassName,
  3568.     IN OUT  LPDWORD lpdwBufferLength
  3569.     );
  3570. #ifdef UNICODE
  3571. #define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID  LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW
  3572. #else
  3573. #define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID  LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA
  3574. #endif // !UNICODE
  3575. #endif // INCL_WINSOCK_API_TYPEDEFS
  3576.  
  3577. #if INCL_WINSOCK_API_PROTOTYPES
  3578. WINSOCK_API_LINKAGE
  3579. INT
  3580. WSAAPI
  3581. WSASetServiceA(
  3582.     IN LPWSAQUERYSETA lpqsRegInfo,
  3583.     IN WSAESETSERVICEOP essoperation,
  3584.     IN DWORD dwControlFlags
  3585.     );
  3586. WINSOCK_API_LINKAGE
  3587. INT
  3588. WSAAPI
  3589. WSASetServiceW(
  3590.     IN LPWSAQUERYSETW lpqsRegInfo,
  3591.     IN WSAESETSERVICEOP essoperation,
  3592.     IN DWORD dwControlFlags
  3593.     );
  3594. #ifdef UNICODE
  3595. #define WSASetService  WSASetServiceW
  3596. #else
  3597. #define WSASetService  WSASetServiceA
  3598. #endif // !UNICODE
  3599. #endif // INCL_WINSOCK_API_PROTOTYPES
  3600.  
  3601. #if INCL_WINSOCK_API_TYPEDEFS
  3602. typedef
  3603. INT
  3604. (WSAAPI * LPFN_WSASETSERVICEA)(
  3605.     IN LPWSAQUERYSETA lpqsRegInfo,
  3606.     IN WSAESETSERVICEOP essoperation,
  3607.     IN DWORD dwControlFlags
  3608.     );
  3609. typedef
  3610. INT
  3611. (WSAAPI * LPFN_WSASETSERVICEW)(
  3612.     IN LPWSAQUERYSETW lpqsRegInfo,
  3613.     IN WSAESETSERVICEOP essoperation,
  3614.     IN DWORD dwControlFlags
  3615.     );
  3616. #ifdef UNICODE
  3617. #define LPFN_WSASETSERVICE  LPFN_WSASETSERVICEW
  3618. #else
  3619. #define LPFN_WSASETSERVICE  LPFN_WSASETSERVICEA
  3620. #endif // !UNICODE
  3621. #endif // INCL_WINSOCK_API_TYPEDEFS
  3622.  
  3623. #if INCL_WINSOCK_API_PROTOTYPES
  3624. WINSOCK_API_LINKAGE
  3625. INT
  3626. WSAAPI
  3627. WSAProviderConfigChange(
  3628.     IN OUT LPHANDLE lpNotificationHandle,
  3629.     IN LPWSAOVERLAPPED lpOverlapped,
  3630.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  3631.     );
  3632. #endif // INCL_WINSOCK_API_PROTOTYPES
  3633.  
  3634. #if INCL_WINSOCK_API_TYPEDEFS
  3635. typedef
  3636. INT
  3637. (WSAAPI * LPFN_WSAPROVIDERCONFIGCHANGE)(
  3638.     IN OUT LPHANDLE lpNotificationHandle,
  3639.     IN LPWSAOVERLAPPED lpOverlapped,
  3640.     IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  3641.     );
  3642. #endif // INCL_WINSOCK_API_TYPEDEFS
  3643.  
  3644. /* Microsoft Windows Extended data types */
  3645. typedef struct sockaddr_in SOCKADDR_IN;
  3646. typedef struct sockaddr_in *PSOCKADDR_IN;
  3647. typedef struct sockaddr_in FAR *LPSOCKADDR_IN;
  3648.  
  3649. typedef struct linger LINGER;
  3650. typedef struct linger *PLINGER;
  3651. typedef struct linger FAR *LPLINGER;
  3652.  
  3653. typedef struct in_addr IN_ADDR;
  3654. typedef struct in_addr *PIN_ADDR;
  3655. typedef struct in_addr FAR *LPIN_ADDR;
  3656.  
  3657. typedef struct fd_set FD_SET;
  3658. typedef struct fd_set *PFD_SET;
  3659. typedef struct fd_set FAR *LPFD_SET;
  3660.  
  3661. typedef struct hostent HOSTENT;
  3662. typedef struct hostent *PHOSTENT;
  3663. typedef struct hostent FAR *LPHOSTENT;
  3664.  
  3665. typedef struct servent SERVENT;
  3666. typedef struct servent *PSERVENT;
  3667. typedef struct servent FAR *LPSERVENT;
  3668.  
  3669. typedef struct protoent PROTOENT;
  3670. typedef struct protoent *PPROTOENT;
  3671. typedef struct protoent FAR *LPPROTOENT;
  3672.  
  3673. typedef struct timeval TIMEVAL;
  3674. typedef struct timeval *PTIMEVAL;
  3675. typedef struct timeval FAR *LPTIMEVAL;
  3676.  
  3677. /*
  3678.  * Windows message parameter composition and decomposition
  3679.  * macros.
  3680.  *
  3681.  * WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation
  3682.  * when constructing the response to a WSAAsyncGetXByY() routine.
  3683.  */
  3684. #define WSAMAKEASYNCREPLY(buflen,error)     MAKELONG(buflen,error)
  3685. /*
  3686.  * WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
  3687.  * when constructing the response to WSAAsyncSelect().
  3688.  */
  3689. #define WSAMAKESELECTREPLY(event,error)     MAKELONG(event,error)
  3690. /*
  3691.  * WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application
  3692.  * to extract the buffer length from the lParam in the response
  3693.  * to a WSAAsyncGetXByY().
  3694.  */
  3695. #define WSAGETASYNCBUFLEN(lParam)           LOWORD(lParam)
  3696. /*
  3697.  * WSAGETASYNCERROR is intended for use by the Windows Sockets application
  3698.  * to extract the error code from the lParam in the response
  3699.  * to a WSAGetXByY().
  3700.  */
  3701. #define WSAGETASYNCERROR(lParam)            HIWORD(lParam)
  3702. /*
  3703.  * WSAGETSELECTEVENT is intended for use by the Windows Sockets application
  3704.  * to extract the event code from the lParam in the response
  3705.  * to a WSAAsyncSelect().
  3706.  */
  3707. #define WSAGETSELECTEVENT(lParam)           LOWORD(lParam)
  3708. /*
  3709.  * WSAGETSELECTERROR is intended for use by the Windows Sockets application
  3710.  * to extract the error code from the lParam in the response
  3711.  * to a WSAAsyncSelect().
  3712.  */
  3713. #define WSAGETSELECTERROR(lParam)           HIWORD(lParam)
  3714.  
  3715. #ifdef __cplusplus
  3716. }
  3717. #endif
  3718.  
  3719. #ifndef _WIN64
  3720. #include <poppack.h>
  3721. #endif
  3722.  
  3723. #pragma option pop /*P_O_Pop*/
  3724. #endif  /* _WINSOCK2API_ */
  3725.