www.pudn.com > IOCPSocketServer.rar > ws2tcpip.inc


{ 
	WS2TCPIP.H - WinSock2 Extension for TCP/IP protocols 
 
	This file contains TCP/IP specific information for use 
	by WinSock2 compatible applications. 
 
	Copyright (c) 1995-1999  Microsoft Corporation 
 
	To provide the backward compatibility, all the TCP/IP 
	specific definitions that were included in the WINSOCK.H 
	file are now included in WINSOCK2.H file. WS2TCPIP.H 
	file includes only the definitions  introduced in the 
	"WinSock 2 Protocol-Specific Annex" document. 
 
	Rev 0.3	Nov 13, 1995 
	Rev 0.4	Dec 15, 1996 
} 
 
// Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP 
type 
	ip_mreq = packed record 
		imr_multiaddr : TInAddr; // IP multicast address of group 
		imr_interface : TInAddr; // local IP address of interface 
  end; 
 
// TCP/IP specific Ioctl codes 
const 
 
	SIO_GET_INTERFACE_LIST    = IOC_OUT or (SizeOf(Longint) shl 16) or (Ord('t') shl 8) or 127; 
// New IOCTL with address size independent address array 
	SIO_GET_INTERFACE_LIST_EX = IOC_OUT or (SizeOf(Longint) shl 16) or (Ord('t') shl 8) or 126; 
 
// Options for use with [gs]etsockopt at the IP level. 
	IP_OPTIONS         =  1; // set/get IP options 
	IP_HDRINCL         =  2; // header is included with data 
	IP_TOS             =  3; // IP type of service and preced 
	IP_TTL             =  4; // IP time to live 
	IP_MULTICAST_IF    =  9; // set/get IP multicast i/f 
	IP_MULTICAST_TTL   = 10; // set/get IP multicast ttl 
	IP_MULTICAST_LOOP  = 11; // set/get IP multicast loopback 
	IP_ADD_MEMBERSHIP  = 12; // add an IP group membership 
	IP_DROP_MEMBERSHIP = 13; // drop an IP group membership 
	IP_DONTFRAGMENT    = 14; // don't fragment IP datagrams 
 
  IP_DEFAULT_MULTICAST_TTL   = 1;    // normally limit m'casts to 1 hop 
  IP_DEFAULT_MULTICAST_LOOP  = 1;    // normally hear sends if a member 
  IP_MAX_MEMBERSHIPS         = 20;   // per socket; must fit in one mbuf 
 
// Option to use with [gs]etsockopt at the IPPROTO_UDP level 
	UDP_NOCHECKSUM     = 1; 
 
// Option to use with [gs]etsockopt at the IPPROTO_TCP level 
  TCP_EXPEDITED_1122 = $0002; 
 
 
// IPv6 definitions 
type 
	IN_ADDR6 = packed record 
		s6_addr : array[0..15] of u_char; // IPv6 address 
	end; 
  TIn6Addr   = IN_ADDR6; 
  PIn6Addr   = ^IN_ADDR6; 
  IN6_ADDR   = IN_ADDR6; 
  PIN6_ADDR  = ^IN_ADDR6; 
  LPIN6_ADDR = ^IN_ADDR6; 
 
// Old IPv6 socket address structure (retained for sockaddr_gen definition below) 
	SOCKADDR_IN6_OLD = packed record 
		sin6_family   : Smallint;         // AF_INET6 
		sin6_port     : u_short;          // Transport level port number 
		sin6_flowinfo : u_long;           // IPv6 flow information 
		sin6_addr     : IN_ADDR6;         // IPv6 address 
	end; 
 
// IPv6 socket address structure, RFC 2553 
	SOCKADDR_IN6 = packed record 
		sin6_family   : Smallint;         // AF_INET6 
		sin6_port     : u_short;          // Transport level port number 
		sin6_flowinfo : u_long;           // IPv6 flow information 
		sin6_addr     : IN_ADDR6;         // IPv6 address 
		sin6_scope_id : u_long;           // set of interfaces for a scope 
	end; 
  TSockAddrIn6   = SOCKADDR_IN6; 
  PSockAddrIn6   = ^SOCKADDR_IN6; 
  PSOCKADDR_IN6  = ^SOCKADDR_IN6; 
  LPSOCKADDR_IN6 = ^SOCKADDR_IN6; 
 
	sockaddr_gen = packed record 
		case Integer of 
		1 : ( Address : SOCKADDR; ); 
		2 : ( AddressIn : SOCKADDR_IN; ); 
		3 : ( AddressIn6 : SOCKADDR_IN6_OLD; ); 
	end; 
 
// Structure to keep interface specific information 
	INTERFACE_INFO = packed record 
		iiFlags            : u_long;       // Interface flags 
		iiAddress          : sockaddr_gen; // Interface address 
		iiBroadcastAddress : sockaddr_gen; // Broadcast address 
		iiNetmask          : sockaddr_gen; // Network mask 
	end; 
	TINTERFACE_INFO  = INTERFACE_INFO; 
	LPINTERFACE_INFO = ^INTERFACE_INFO; 
 
// New structure that does not have dependency on the address size 
	INTERFACE_INFO_EX = packed record 
		iiFlags            : u_long;         // Interface flags 
		iiAddress          : SOCKET_ADDRESS; // Interface address 
		iiBroadcastAddress : SOCKET_ADDRESS; // Broadcast address 
		iiNetmask : SOCKET_ADDRESS;          // Network mask 
	end; 
	TINTERFACE_INFO_EX  = INTERFACE_INFO_EX; 
	LPINTERFACE_INFO_EX = ^INTERFACE_INFO_EX; 
 
// Possible flags for the  iiFlags - bitmask 
 
const 
	IFF_UP           = $00000001;  // Interface is up 
	IFF_BROADCAST    = $00000002;  // Broadcast is  supported 
	IFF_LOOPBACK     = $00000004;  // this is loopback interface 
	IFF_POINTTOPOINT = $00000008;  // this is point-to-point interface 
	IFF_MULTICAST    = $00000010;  // multicast is supported