将asio套接字多播增强到特定的以太网接口

Jan*_*jto 5 boost interface multicast boost-asio

我以为我在下面的例子中找到了答案,但并不完全.

boost::asio::ip::udp::socket socket(io_service); 
...
boost::asio::ip::address_v4 local_interface =
    boost::asio::ip::address_v4::from_string("1.2.3.4");
boost::asio::ip::multicast::outbound_interface option(local_interface);
socket.set_option(option);
Run Code Online (Sandbox Code Playgroud)

如何映射eth0到适当的outbound_interface选项?

eil*_*ile 0

以下代码在 Windows 和 Mac OS X 上运行良好:

    const ip::udp::resolver::query queryIF( ip::udp::v4(),                   
                                        _description->getInterface(), "0" ); 
    const ip::udp::resolver::iterator interfaceIP =                          
        resolver.resolve( queryIF );                                         

    if( interfaceIP == end )                                                 
        return false;                                                        

    const ip::address ifAddr( ip::udp::endpoint( *interfaceIP ).address( )); 

    _read->set_option( ip::multicast::join_group( mcAddr.to_v4(),            
                                                  ifAddr.to_v4( )));         
    _write->set_option( ip::multicast::outbound_interface( ifAddr.to_v4()));
Run Code Online (Sandbox Code Playgroud)

编辑:我在 Linux 上遇到了一些问题,但还没有研究它。我的猜测是套接字选项被忽略,有利于路由表。