编程接口指南

发送 IPv6 多点传送数据报

要发送 IPv6 多点传送数据报,请在 ff00::0/8 范围中指定一个 IP 多点传送地址作为 sendto(3SOCKET) 调用的目标地址。

缺省情况下,IP 多点传送数据报的发送跃点限制为 1,此值可以阻止将数据报转发到单个子网之外。 使用套接字选项 IPV6_MULTICAST_HOPS,可以将后续多点传送数据报的跃点限制设置为 0 到 255 之间的任何值。此功能用于控制多点传送的范围:

    uint_l;

    setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops,sizeof(hops))

不能在任何子网中传输跃点限制为 0 的多点传送数据报,但是在以下情况下可以在本地范围内传送数据报:

如果第一跃点子网连接到一个或多个多点传送路由器,则可以将跃点限制大于 1 的多点传送数据报传送到多个子网。 与 IPv4 多点传送地址不同,IPv6 多点传送地址包含明确的范围信息,此信息在地址的第一部分进行编码。定义的范围如下,其中未指定 X

ffX1::0/16

节点-本地范围,限定在同一节点

ffX2::0/16

链路-本地范围

ffX5::0/16

站点-本地范围

ffX8::0/16

组织-本地范围

ffXe::0/16

全局范围

应用程序可独立于多点传送地址范围,使用不同的跃点限制值。例如,应用程序可以通过发送多点传送查询来对网络资源执行扩展环搜索,即第一个跃点限制值为 0,然后逐渐增大跃点限制值,直到收到回复为止。

即使主机拥有多个具有多点传送功能的接口,每个多点传送传输也是通过单个网络接口发送的。如果主机还用作多点传送路由器且跃点限制值大于 1,则多点传送可以转发到源接口之外的接口。 套接字选项可以覆盖来自给定套接字的后续传输的缺省设置:

    uint_t ifindex;



    ifindex = if_nametoindex ("hme3");

    setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_IF, &ifindex,

          sizeof(ifindex))

其中,ifindex 是所需传出接口的接口索引。通过指定值 0 恢复到缺省接口。

如果将多点传送数据报发送到发送主机本身所属的组,则缺省情况下,本地传送的 IP 层将回送此数据报的副本。另一套接字选项可为发送主机提供针对是否回送后续数据报的显式控制:

    uint_t loop;

    setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, &loop, 

            sizeof(loop))  

其中,loop 为 0 即为禁用回送,为 1 即为启用回送。 此选项通过消除因接收应用程序自己的传输内容而产生的开销,可提高单台主机上只有一个实例的应用程序(如路由器或邮件守护进程)的性能。 对于可以在一台主机上具有多个实例的应用程序(如会议程序)或者其发送主机不属于目标组的应用程序(如时间查询程序),不应使用此选项。

如果发送主机属于其他接口的目标组,则发送初始跃点限制大于 1 的多点传送数据报可以传送到其他接口上的发送主机。 回送控制选项不会影响此类传送。