【发布时间】:2011-11-23 02:42:26
【问题描述】:
基本上我有一个应用程序,它在同一个接口和同一个应用程序内创建了 5 个多播套接字,每个套接字绑定到不同的多播 IP 地址/端口。当这些套接字中的任何一个发送消息时,应用程序中的其他 4 个套接字最终会读取该消息。这是正常行为吗?
这发生在使用 boost.asio 和 gcc 4.6 的 Ubuntu 11.10 中。
【问题讨论】:
标签: c++ networking udp boost-asio multicast
基本上我有一个应用程序,它在同一个接口和同一个应用程序内创建了 5 个多播套接字,每个套接字绑定到不同的多播 IP 地址/端口。当这些套接字中的任何一个发送消息时,应用程序中的其他 4 个套接字最终会读取该消息。这是正常行为吗?
这发生在使用 boost.asio 和 gcc 4.6 的 Ubuntu 11.10 中。
【问题讨论】:
标签: c++ networking udp boost-asio multicast
在某些操作系统中这是正常的 ;-) 您可以使用 setsockopt() 和 IP_MULTICAST_LOOP 选项将其关闭。
【讨论】:
对我来说听起来很奇怪。如果您使用的是 UDP,那么您应该只接收与 UDP 套接字端口号相关的消息。当然,如果您在 IP 级别使用多播,那么端口号就无关紧要了。
如果没有禁用环回,环回将导致程序接收自己的消息,这是完全正确的(根据 EJP)。但是,UDP 端口号仍然适用。发送到端口 x 的多播 UDP 消息不应被侦听端口 y 的套接字接收。
【讨论】: