IPV6_MREQ 结构 (ws2ipdef.h)
ipv6_mreq结构为 IPv6 地址提供多播组信息。
语法
typedef struct ipv6_mreq {
IN6_ADDR ipv6mr_multiaddr;
ULONG ipv6mr_interface;
} IPV6_MREQ, *PIPV6_MREQ;
成员
ipv6mr_multiaddr
IPv6 多播组的地址。
ipv6mr_interface
应加入或删除多播组的本地接口的接口索引。 如果此成员将接口索引指定为 0,则使用默认多播接口。
注解
ipv6_mreq结构与 IPv6 地址一起使用。 ipv6_mreq 结构与 IPV6_ADD_MEMBERSHIP、IPV6_DROP_MEMBERSHIP、IPV6_JOIN_GROUP 和 IPV6_LEAVE_GROUP 套接字选项一起使用。 IPV6_JOIN_GROUP和IPV6_ADD_MEMBERSHIP套接字选项定义为相同。 IPV6_LEAVE_GROUP和IPV6_DROP_MEMBERSHIP套接字选项定义为相同。
在 Windows Vista 及更高版本上,一组套接字选项可用于支持 IPv6 和 IPv4 地址的多播编程。 这些套接字选项与 IP 无关,可以在 IPv6 和 IPv4 上使用。 这些 IP 不可知的选项使用 GROUP_REQ 和 GROUP_SOURCE_REQ 结构,是 Windows Vista 及更高版本上多播编程的首选套接字选项。
ipv6_mreq结构是 IPv6 等效于基于 IPv4 的ip_mreq结构。
GetAdaptersAddresses 函数可用于获取ipv6mr_interface成员所需的接口索引信息。
使用此结构的ipv6_mreq结构和IPPROTO_IPV6级套接字选项仅在数据报和原始套接字上有效, (套接字类型必须是SOCK_DGRAM或SOCK_RAW) 。
建议始终在 ipv6_mreq 结构的ipv6mr_interface 成员中指定本地 IPv6 接口索引,而不是使用默认接口。 这在具有多个网络接口和多个公共 IPv6 地址的计算机上尤其重要。
用于 IPv6 多播的默认接口由 Windows 中的网络堆栈确定。 在 Windows Vista 及更高版本上,应用程序可以使用 GetIpForwardTable2 函数来确定用于 IPv6 多播的默认接口,以检索 IPv6 路由表。 目标 IPv6 多播地址的路由指标值最低的网络接口 (FF00::/8 IPv6 地址块) 是 IPv6 多播的默认接口。 还可以使用以下命令从命令提示符显示路由表:
route print
IPV6_MULTICAST_IF套接字选项可用于设置默认接口以发送 IPv6 多播数据包。 此套接字选项不会更改用于接收 IPv6 多播数据包的默认接口。
典型的 IPv6 多播应用程序将使用具有ipv6_mreq结构的IPV6_ADD_MEMBERSHIP或IPV6_JOIN_GROUP套接字选项来加入多播组并侦听特定接口上的多播数据包。 IPV6_MULTICAST_IF套接字选项将用于设置接口以将 IPv6 多播数据包发送到多播组。 最常见的方案是多播应用程序,该应用程序在多播组的同一接口上侦听和发送。 多播应用程序可以使用多个套接字,其中一个套接字用于侦听,一个或多个套接字用于发送。
在为 Windows Vista 及更高版本发布的 Microsoft Windows 软件开发工具包 (Windows SDK) (SDK) 中,头文件的组织方式已更改,ipv6_mreq结构在 Ws2ipdef.h 头文件中定义,该文件自动包含在 Ws2tcpip.h 头文件中。 永远不应直接使用 Ws2ipdef.h 头文件。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | ws2ipdef.h (包括 Ws2tcpip.h) |