设置为接收多播数据包的 IPv6 UDP 套接字是否也应该能够接收单播数据包?
Should an IPv6 UDP socket that is set up to receive multicast packets also be able to receive unicast packets?
我有一个小客户端程序,它在 IPv6 多播组(例如 ff12::blah:blah%en0)上侦听服务器发出的多播数据包。效果很好。
服务器有时还想向我的客户端发送一个单播数据包(因为如果该数据包仅与一个客户端相关,那么用它来打扰多播组的所有其他成员是没有意义的)。所以我的服务器只是对我客户端的 IP 地址和客户端的 IPv6 多播套接字正在侦听的端口执行 sendto()。
如果我的客户是 MacOS/X 下的 运行,这工作正常;单播数据包由接收多播数据包的同一个套接字接收。在 Windows,OTOH 下,客户端永远不会收到单播数据包(即使它确实毫无问题地收到多播数据包)。
我的问题是,多播侦听器 IPv6 UDP 套接字是否也应该能够在同一端口上接收单播数据包(在这种情况下,我可能做错了什么,或者 Windows 配置错误)?或者这是 "just happens to work" 在 MacOS/X 下但不能保证的东西,所以它在 Windows 下对我不起作用的事实只是意味着我有错误的期望?
它应该可以正常工作。只要你绑定到IN6ADDR_ANY
,然后加入多播组,你应该可以毫无问题地发送和接收单播数据包。
使用多播时绑定到 IN6ADDR_ANY
(或 IPv4 的 INADDR_ANY
)很重要。如果绑定到特定接口,这会中断 Linux 系统上的多播。
我有一个小客户端程序,它在 IPv6 多播组(例如 ff12::blah:blah%en0)上侦听服务器发出的多播数据包。效果很好。
服务器有时还想向我的客户端发送一个单播数据包(因为如果该数据包仅与一个客户端相关,那么用它来打扰多播组的所有其他成员是没有意义的)。所以我的服务器只是对我客户端的 IP 地址和客户端的 IPv6 多播套接字正在侦听的端口执行 sendto()。
如果我的客户是 MacOS/X 下的 运行,这工作正常;单播数据包由接收多播数据包的同一个套接字接收。在 Windows,OTOH 下,客户端永远不会收到单播数据包(即使它确实毫无问题地收到多播数据包)。
我的问题是,多播侦听器 IPv6 UDP 套接字是否也应该能够在同一端口上接收单播数据包(在这种情况下,我可能做错了什么,或者 Windows 配置错误)?或者这是 "just happens to work" 在 MacOS/X 下但不能保证的东西,所以它在 Windows 下对我不起作用的事实只是意味着我有错误的期望?
它应该可以正常工作。只要你绑定到IN6ADDR_ANY
,然后加入多播组,你应该可以毫无问题地发送和接收单播数据包。
使用多播时绑定到 IN6ADDR_ANY
(或 IPv4 的 INADDR_ANY
)很重要。如果绑定到特定接口,这会中断 Linux 系统上的多播。