提升asio组播加入

时间:2016-07-19 03:18:06

标签: c++ boost routing multicast

我在使用boost :: asio的程序中犯了一个错误,因为在接收组播数据时,它会绑定到组播地址而不是本地接口ip。没有错误。不知怎的,在多家Linux主机上,它仍然收到了组播数据。但是当我在另一个多家庭盒子上运行它时,却无法实现。这是做什么的?

boost::asio::ip::address multicast_address( boost::asio::ip::address::from_string( "239.1.1.100" ) );
unsigned port( 12345 );
boost::asio::io_service io;
boost::asio::ip::udp::socket socket;

boost::asio::ip::udp::endpoint listen_endpoint( multicast_address, multicast_port );
socket.open( listen_endpoint.protocol() );
socket.set_option( boost::asio::ip::udp::socket::reuse_address( true ) );
socket.bind( listen_endpoint );
socket.set_option( boost::asio::ip::multicast::join_group( multicast_address ) );

1 个答案:

答案 0 :(得分:0)

listen_endpoint应绑定到本地接收方端点的地址,即要使用的网络接口。将其设置为any()boost使用默认接收器,例如:

boost::asio::ip::udp::endpoint listen_endpoint
    ( boost::asio::ip::address_v4::any(), multicast_port );

multicast_address应该只用于加入多播组,按照最后一行。

这里有一些有用的信息:Are you ready for IPV6?