如何绑定boost udp套接字到特定的接口

How to bind boost udp socket to specific interface

本文关键字:套接字 接口 udp boost 何绑定 绑定      更新时间:2023-10-16

我已经实现了一个boost多播UDP侦听器。

我想让它从发送多播数据包的无线设备接收消息。

如果我运行我的进程,当以太网电缆断开时,我收到数据包。但是,如果我在连接以太网电缆时启动该进程(因此有2个接口可用),我不会收到数据包。

我尝试将套接字绑定到本地地址,但没有成功。

这是我的一部分代码。如果您需要更多的信息,请告诉我。

boost::asio::io_service ioService();
boost::asio::ip::udp::endpoint multicastEP(multicastAddress, multicastPort);
boost::asio::ip::udp::endpoint localEP(localAddress, multicastPort);
boost::asio::ip::udp::socket socket(ioService, localEP.protocol());
socket.set_option(boost::asio::ip::udp::socket::reuse_address(true));
socket.set_option( boost::asio::ip::multicast::enable_loopback(true));
socket.set_option(boost::asio::ip::multicast::join_group(multicastEP.address()));
socket.bind(boost::asio::ip::udp::endpoint(boost::asio::ip::address_v4::any(), multicastPort));

我认为这应该通过系统路由级别来解决,因为套接字是一个上层,没有直接绑定到网络设备…因此,解决这一问题的方法是路由的优先级和操作。