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

  1. /*    
  2. **    WS2TCPIP.H - WinSock2 Extension for TCP/IP protocols
  3. **
  4. **    This file contains TCP/IP specific information for use
  5. **    by WinSock2 compatible applications.
  6. **
  7. ** Copyright (c) 1995-1999  Microsoft Corporation
  8. **
  9. **    To provide the backward compatibility, all the TCP/IP
  10. **    specific definitions that were included in the WINSOCK.H
  11. **     file are now included in WINSOCK2.H file. WS2TCPIP.H
  12. **    file includes only the definitions  introduced in the
  13. **    "WinSock 2 Protocol-Specific Annex" document.
  14. **
  15. **    Rev 0.3    Nov 13, 1995
  16. **      Rev 0.4    Dec 15, 1996
  17. */
  18.  
  19. #ifndef _WS2TCPIP_H_
  20. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  21. #define _WS2TCPIP_H_
  22.  
  23. #if _MSC_VER > 1000
  24. #pragma once
  25. #endif
  26.  
  27. /* Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP */
  28.  
  29. struct ip_mreq {
  30.     struct in_addr imr_multiaddr;    /* IP multicast address of group */
  31.     struct in_addr imr_interface;    /* local IP address of interface */
  32. };
  33.  
  34. /* TCP/IP specific Ioctl codes */
  35.  
  36. #define SIO_GET_INTERFACE_LIST  _IOR('t', 127, u_long)    
  37. /* New IOCTL with address size independent address array */
  38. #define SIO_GET_INTERFACE_LIST_EX  _IOR('t', 126, u_long)    
  39.  
  40. /* Option to use with [gs]etsockopt at the IPPROTO_IP level */
  41.  
  42. #define    IP_OPTIONS        1 /* set/get IP options */
  43. #define    IP_HDRINCL        2 /* header is included with data */
  44. #define    IP_TOS            3 /* IP type of service and preced*/
  45. #define    IP_TTL            4 /* IP time to live */
  46. #define    IP_MULTICAST_IF        9 /* set/get IP multicast i/f  */
  47. #define    IP_MULTICAST_TTL       10 /* set/get IP multicast ttl */
  48. #define    IP_MULTICAST_LOOP      11 /*set/get IP multicast loopback */
  49. #define    IP_ADD_MEMBERSHIP      12 /* add an IP group membership */
  50. #define    IP_DROP_MEMBERSHIP     13/* drop an IP group membership */
  51. #define IP_DONTFRAGMENT     14 /* don't fragment IP datagrams */
  52.  
  53.  
  54. /* Option to use with [gs]etsockopt at the IPPROTO_UDP level */
  55.  
  56. #define UDP_NOCHECKSUM    1
  57.  
  58. /* Option to use with [gs]etsockopt at the IPPROTO_TCP level */
  59.  
  60. #define  TCP_EXPEDITED_1122    0x0002
  61.  
  62.  
  63. /* IPv6 definitions */
  64.  
  65. struct in_addr6 {
  66.         u_char    s6_addr[16];    /* IPv6 address */
  67. };
  68.  
  69. /* Old IPv6 socket address structure (retained for sockaddr_gen definition below) */
  70.  
  71. struct sockaddr_in6_old {
  72.         short    sin6_family;       /* AF_INET6 */
  73.         u_short sin6_port;    /* Transport level port number */
  74.         u_long    sin6_flowinfo;    /* IPv6 flow information */
  75.         struct in_addr6 sin6_addr; /* IPv6 address */
  76. };
  77.  
  78. /* IPv6 socket address structure, RFC 2553 */
  79.  
  80. struct sockaddr_in6 {
  81.         short    sin6_family;       /* AF_INET6 */
  82.         u_short sin6_port;    /* Transport level port number */
  83.         u_long    sin6_flowinfo;    /* IPv6 flow information */
  84.         struct in_addr6 sin6_addr; /* IPv6 address */
  85.         u_long sin6_scope_id;  /* set of interfaces for a scope */
  86. };
  87.  
  88.  
  89. typedef struct in_addr6 IN6_ADDR;
  90. typedef struct in_addr6 *PIN6_ADDR;
  91. typedef struct in_addr6 FAR *LPIN6_ADDR;
  92.  
  93. typedef struct sockaddr_in6 SOCKADDR_IN6;
  94. typedef struct sockaddr_in6 *PSOCKADDR_IN6;
  95. typedef struct sockaddr_in6 FAR *LPSOCKADDR_IN6;
  96.  
  97.  
  98. #define IN6ADDR_SETANY(x) {\
  99. (x)->sin6_family = AF_INET6; \
  100. (x)->sin6_port = 0; \
  101. (x)->sin6_flowinfo = 0; \
  102. *((u_long *)((x)->sin6_addr.s6_addr)    ) = 0; \
  103. *((u_long *)((x)->sin6_addr.s6_addr) + 1) = 0; \
  104. *((u_long *)((x)->sin6_addr.s6_addr) + 2) = 0; \
  105. *((u_long *)((x)->sin6_addr.s6_addr) + 3) = 0; \
  106. }
  107. #define IN6ADDR_SETLOOPBACK(x) {\
  108. (x)->sin6_family = AF_INET6; \
  109. (x)->sin6_port = 0; \
  110. (x)->sin6_flowinfo = 0; \
  111. *((u_long *)((x)->sin6_addr.s6_addr)    ) = 0; \
  112. *((u_long *)((x)->sin6_addr.s6_addr) + 1) = 0; \
  113. *((u_long *)((x)->sin6_addr.s6_addr) + 2) = 0; \
  114. *((u_long *)((x)->sin6_addr.s6_addr) + 3) = 1; \
  115. }
  116.  
  117. #define IN6ADDR_ISANY(x) ( \
  118. (x)->sin6_family == AF_INET6 && \
  119. *((u_long *)((x)->sin6_addr.s6_addr)    ) == 0 && \
  120. *((u_long *)((x)->sin6_addr.s6_addr) + 1) == 0 && \
  121. *((u_long *)((x)->sin6_addr.s6_addr) + 2) == 0 && \
  122. *((u_long *)((x)->sin6_addr.s6_addr) + 3) == 0 \
  123. )
  124.  
  125.  
  126. #define IN6ADDR_ISLOOPBACK(x) (\
  127. (x)->sin6_family == AF_INET6 && \
  128. *((u_long *)((x)->sin6_addr.s6_addr)    ) == 0 && \
  129. *((u_long *)((x)->sin6_addr.s6_addr) + 1) == 0 && \
  130. *((u_long *)((x)->sin6_addr.s6_addr) + 2) == 0 && \
  131. *((u_long *)((x)->sin6_addr.s6_addr) + 3) == 1 \
  132. )
  133.  
  134.  
  135. typedef union sockaddr_gen{
  136.         struct sockaddr Address;
  137.         struct sockaddr_in  AddressIn;
  138.         struct sockaddr_in6_old AddressIn6;
  139. } sockaddr_gen;
  140.  
  141. /* Structure to keep interface specific information */
  142.  
  143. typedef struct _INTERFACE_INFO
  144. {
  145.     u_long        iiFlags;        /* Interface flags */
  146.     sockaddr_gen    iiAddress;        /* Interface address */
  147.     sockaddr_gen    iiBroadcastAddress;     /* Broadcast address */
  148.     sockaddr_gen    iiNetmask;        /* Network mask */
  149. } INTERFACE_INFO, FAR * LPINTERFACE_INFO;
  150.  
  151. /* New structure that does not have dependency on the address size */
  152. typedef struct _INTERFACE_INFO_EX
  153. {
  154.     u_long      iiFlags;        /* Interface flags */
  155.     SOCKET_ADDRESS  iiAddress;          /* Interface address */
  156.     SOCKET_ADDRESS  iiBroadcastAddress; /* Broadcast address */
  157.     SOCKET_ADDRESS  iiNetmask;          /* Network mask */
  158. } INTERFACE_INFO_EX, FAR * LPINTERFACE_INFO_EX;
  159.  
  160. /* Possible flags for the  iiFlags - bitmask  */
  161.  
  162. #define IFF_UP        0x00000001 /* Interface is up */
  163. #define IFF_BROADCAST    0x00000002 /* Broadcast is  supported */
  164. #define IFF_LOOPBACK    0x00000004 /* this is loopback interface */
  165. #define IFF_POINTTOPOINT 0x00000008 /*this is point-to-point interface*/
  166. #define IFF_MULTICAST    0x00000010 /* multicast is supported */
  167.  
  168.  
  169. #pragma option pop /*P_O_Pop*/
  170. #endif    /* _WS2TCPIP_H_ */
  171.  
  172.