IP 多播属于非根数据平面和非根控制平面类别。 所有应用程序都扮演叶角色。 目前,大多数 IP 多播实现都使用 Steve Deering 向 Internet 工程工作队(IETF)提出的一组套接字选项。 因此,有五个作可用:
- IP_MULTICAST_TTL - 设置多播会话的时间到实时控制范围。
- IP_MULTICAST_IF - 确定要用于多播的接口。
- IP_ADD_MEMBERSHI - 联接指定的多播会话。
- IP_DROP_MEMBERSHIP - 退出多播会话。
- IP_MULTICAST_LOOP - 控制多播流量的环回。
设置 IP 多播套接字的生存时间直接映射到使用 WSAIoctl的 SIO_MULTICAST_SCOPE 命令代码。
确定要用于多播的 IP 接口的方法是通过 TCP/IP 特定的套接字选项,如 Windows 套接字 2 Protocol-Specific 附件中所述。 下面介绍的 Windows 套接字 2 语义很好地介绍了其余三项作。
应用程序将在 WSASocket中打开具有c_leaf/d_leaf标志的套接字。 它将使用 WSAJoinLeaf 将自身添加到为多播作指定的默认接口上的多播组。 如果 WSAJoinLeaf 中的标志指示此套接字只是发送方,则联接作实质上是 no-op,无需发送 IGMP 消息。 否则,IGMP 数据包将发送到路由器,以指示接收发送到指定多播地址的数据包的兴趣。 由于应用程序创建了仅用于执行多播的特殊c_leaf/d_leaf套接字,因此标准 closesocket 函数将用于退出多播会话。 WSAIoctl 的 SIO_MULTIPOINT_LOOPBACK 命令代码提供了一种通用控制机制,用于确定是否可以在同一套接字上接收非根多点方案中d_leaf套接字上发送的数据。
注意
IP_MULTICAST_LOOP选项的 Winsock 版本在语义上不同于IP_MULTICAST_LOOP选项的 UNIX 版本:
- 在 Winsock 中,IP_MULTICAST_LOOP选项仅适用于接收路径。
- 在 UNIX 版本中,IP_MULTICAST_LOOP选项适用于发送路径。
例如,应用程序 ON 和 OFF(比 X 和 Y 更容易跟踪)加入同一接口上的同一组;application ON 设置打开IP_MULTICAST_LOOP选项,应用程序 OFF 将IP_MULTICAST_LOOP选项设置为关闭。 如果 ON 和 OFF 是 Winsock 应用程序,则 OFF 可以发送到 ON,但 ON 无法发送到 OFF。 相比之下,如果 ON 和 OFF 是 UNIX 应用程序,则 ON 可以发送到 OFF,但 OFF 无法发送到 ON。