WSA_XTRA.H
上传用户:tjfeida
上传日期:2013-03-10
资源大小:1917k
文件大小:4k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. /*
  2.  * Filename: wsa_xtra.h
  3.  *
  4.  * Description:
  5.  *  - macros WinSock v1.1 forgot
  6.  *  - fixes one broken macro in v1.1
  7.  *  - structures for optional features 
  8.  *
  9.  * Edit History:
  10.  *  10/10/95 changed ip_mreq declaration to avoid redefinition if already defined,
  11.  *           and forced BSD macro values for multicast socket options.
  12.  */
  13. #ifndef _WSA_XTRA_
  14. #define _WSA_XTRA_ 
  15.  
  16. #include <winsock.h>
  17. /* fix of broken macro in v1.1 WinSock.H */
  18. #undef  IPROTO_GGP
  19. #define IPROTO_GGP  3
  20. #ifndef IPROTO_IGMP
  21. #define IPROTO_IGMP 2
  22. #endif
  23. #define MAXHOSTNAME   128   /* Maximum length of a DNS hostname */
  24. #define MAXADDRSTR    16    /* Maximum length of an IP Address string */
  25. /* handy in many places */ 
  26. #define SOCKADDR_LEN sizeof(struct sockaddr)
  27. /* WinSock version information (use WSA_VERSION for WSAStartup()) */
  28. #ifndef MAKEWORD
  29. #define MAKEWORD(l,h) ((WORD)(((BYTE)(l))|(((WORD)(BYTE)(h))<<8)))
  30. #endif
  31. #define WSA_MAJOR_VERSION 1
  32. #define WSA_MINOR_VERSION 1
  33. #define WSA_VERSION MAKEWORD(WSA_MAJOR_VERSION, WSA_MINOR_VERSION)
  34. /* for unix compatibility */
  35. #define bcopy(s,d,n)   _fmemcpy((d),(s),(n))
  36. #define bcmp(s1,s2,n)  _fmemcmp((s1),(s2),(n))
  37. #define bzero(s,n)     _fmemset(((s),0,(n))
  38. #define IP_TTL  4 /* level=IPPROTO_IP option, Time To Live */
  39. #define MAX_TTL 255 /* maximum IP "Time To Live" value */
  40. /* ICMP types */
  41. #define ICMP_ECHOREPLY 0 /* ICMP type: echo reply */
  42. #define ICMP_ECHOREQ 8 /* ICMP type: echo request */
  43. /* definition of ICMP header as per RFC 792 */
  44. typedef struct icmp_hdr {
  45. u_char icmp_type; /* type of message */
  46. u_char icmp_code; /* type sub code */
  47. u_short icmp_cksum; /* ones complement cksum */
  48. u_short icmp_id; /* identifier */
  49. u_short icmp_seq; /* sequence number */
  50. char icmp_data[1]; /* data */
  51. } ICMP_HDR, *PICMPHDR, FAR *LPICMPHDR;
  52. #define ICMP_HDR_LEN sizeof(ICMP_HDR)
  53. /* definition of IP header version 4 as per RFC 791 */
  54. #define IPVERSION 4
  55. typedef struct ip_hdr {
  56. u_char ip_hl; /* header length */
  57. u_char ip_v; /* version */
  58. u_char ip_tos; /* type of service */
  59. short ip_len; /* total length */
  60. u_short ip_id; /* identification */
  61. short ip_off; /* fragment offset field */
  62. u_char ip_ttl; /* time to live */
  63. u_char ip_p; /* protocol */
  64. u_short ip_cksum; /* checksum */
  65. struct in_addr ip_src; /* source address */
  66. struct in_addr ip_dst; /* destination address */
  67. } IP_HDR, *PIP_HDR, *LPIP_HDR;
  68. #define IP_HDR_LEN sizeof(IP_HDR)
  69. /* 
  70.  * The following constants are from BSD /include/netinet/in.h
  71.  *  header file.  They DO NOT match the values defined by Steve Deering 
  72.  *  of Stanford University <deering@pescadero.Stanford.EDU> (WinNT v3.5
  73.  *  did use Deering's values, however, which are 2-6 ...offset 7).
  74.  *
  75.  *  The use of these multicast options is described in "IP Multicast 
  76.  *  Extensions for 4.3BSD UNIX related systems (MULTICAST 1.2 Release)".  
  77.  *  It describes the extensions to BSD, SunOS and Ultrix to support 
  78.  *  multicasting, as specified by RFC-1054 (since superceded by RFC-1112)
  79.  *
  80.  *  See chapter 16, "Optional Features," in _Windows Sockets Network
  81.  *  Programming_ by Bob Quinn & Dave Shute, for more information 
  82.  *  (published by Addison-Wesley, ISBN: 0-201-63372-8).
  83.  */
  84. #define DEERING_OFFSET      7   /* subtract this bias for MS WSOCK32 options */
  85. #ifndef  IP_MULTICAST_IF
  86. /* The structure used to add and drop multicast addresses  (the
  87.  *  imr_interface field is ignored since we only support one interface */
  88. typedef struct ip_mreq {
  89. struct in_addr imr_multiaddr; /* multicast group to join */
  90. struct in_addr imr_interface; /* interface to join on */
  91. }IP_MREQ;
  92. #endif
  93. #undef  IP_MULTICAST_IF
  94. #define IP_MULTICAST_IF     9   /* set/get IP mulicast interface */
  95. #undef  IP_MULTICAST_TTL
  96. #define IP_MULTICAST_TTL    10  /* set/get IP multicast timetolive */
  97. #undef  IP_MULTICAST_LOOP
  98. #define IP_MULTICAST_LOOP   11  /* set/get IP multicast loopback */
  99. #undef  IP_ADD_MEMBERSHIP
  100. #define IP_ADD_MEMBERSHIP   12  /* add  (set) IP group membership */
  101. #undef  IP_DROP_MEMBERSHIP
  102. #define IP_DROP_MEMBERSHIP  13  /* drop (set) IP group membership */
  103. #undef  IP_DEFAULT_MULTICAST_TTL
  104. #define IP_DEFAULT_MULTICAST_TTL 1
  105. #undef  IP_DEFAULT_MULTICAST_LOOP
  106. #define IP_DEFAULT_MULTICAST_LOOP 1
  107. #define IP_MAX_MEMBERSHIPS 20
  108. #endif /* _WS_XTRA_ */