{ 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