【发布时间】:2015-05-10 20:39:45
【问题描述】:
我有一个有两个接口的主机。在我的具体情况下,我正在尝试使用 boost::asio::ip::multicast::join_group 加入多播组,这似乎只有在我使用包含本地地址的构造函数时才有效。但是,我事先不知道连接到将进行多播的远程主机的本地接口的 IP 地址。但是我知道它将是 eth1。当然,我可以使其可配置,但这似乎引入了一个无用的错误配置机会,看看如何为接口和我的应用程序配置相同的地址。
理想情况下,应该有一种非常明显的方法可以从接口创建boost::asio::endpoint 或boost::asio::address,而不是我以某种方式错过的地址。或者,我当然会对任何其他方式来推断接口 Ip 感到满意,无论是否有提供 Ip 的 DHCP 服务器。
是否有适当的方法可以做到这一点,或者我应该相信用户永远不会摸索配置?
为了确保这不完全是 XY 问题,这是我在测试加入多播组时使用的代码:
m_socket.open(boost_ip::udp::v4());
m_socket.bind(boost_ip::udp::endpoint(boost_ip::udp::v4(), listeningPort));
m_socket.set_option(boost::asio::ip::udp::socket::reuse_address(true));
m_socket.set_option(boost::asio::ip::multicast::join_group(
boost::asio::ip::address::from_string("225.x.x.10").to_v4(), // remote
boost::asio::ip::address::from_string("192.x.x.3").to_v4())); // local
这确实有效,但是当我丢弃最后一行以不依赖于当前本地地址(可能在部署中更改)时,我不再收到任何数据包。
【问题讨论】:
标签: c++ sockets centos boost-asio network-interface