如何在通过交叉电缆连接的 2 个服务器之间发送多播 UDP?
How can I send multicast UDP between 2 servers connected via cross-cable?
我们有 2 台带有 Solarflare 卡的服务器通过接口(172.16.1.1 和 172.16.1.2)上的电缆直接连接。两台服务器也有其他接口。我想测试在 172.16.1.x 接口上将 UDP 多播数据包从一个发送到另一个。我在发件人上尝试了以下操作:
const auto send_if( "172.16.1.2" );
const auto send_if_addr = boost::asio::ip::address_v4::from_string( send_if );
const boost::asio::ip::udp::endpoint send_if_ep( send_if_addr, 0 );
// let system select a random port to send data
const auto multicast_addr = boost::asio::ip::address_v4::from_string( "239.6.233.4" );
socket_.set_option( boost::asio::ip::udp::socket::reuse_address( true ) );
socket_.set_option( boost::asio::ip::multicast::outbound_interface( send_if_addr ) ); // send from 115
socket_.bind( send_if_ep );
// based on suggestion
//socket_.set_option( boost::asio::ip::multicast::join_group( send_if_addr ) ); // this throws in boost
socket_.set_option( boost::asio::ip::multicast::join_group( multicast_addr ) );
这似乎不起作用。在另一端,连接接口上的 socat 或 tcpdump 不显示任何多播数据。如果我在这个接口上的两台服务器之间没有交换机或路由器,这还能工作吗?加入群永远不会被听到?
原来选项 hops 0 是之前设置的,这是所有人的邪教,我没有看到。我只需要在发送前将 bind() 绑定到接口,不需要任何其他设置就可以了。
// cultpit
// socket.set_option( boost::asio::ip::multicast::hops(0) );
socket_.set_option( boost::asio::ip::udp::socket::reuse_address( true ) );
socket_.bind( boost::asio::ip::udp::endpoint(
boost::asio::ip::address_v4::from_string( "172.16.1.2" ), 0 ) );
我们有 2 台带有 Solarflare 卡的服务器通过接口(172.16.1.1 和 172.16.1.2)上的电缆直接连接。两台服务器也有其他接口。我想测试在 172.16.1.x 接口上将 UDP 多播数据包从一个发送到另一个。我在发件人上尝试了以下操作:
const auto send_if( "172.16.1.2" );
const auto send_if_addr = boost::asio::ip::address_v4::from_string( send_if );
const boost::asio::ip::udp::endpoint send_if_ep( send_if_addr, 0 );
// let system select a random port to send data
const auto multicast_addr = boost::asio::ip::address_v4::from_string( "239.6.233.4" );
socket_.set_option( boost::asio::ip::udp::socket::reuse_address( true ) );
socket_.set_option( boost::asio::ip::multicast::outbound_interface( send_if_addr ) ); // send from 115
socket_.bind( send_if_ep );
// based on suggestion
//socket_.set_option( boost::asio::ip::multicast::join_group( send_if_addr ) ); // this throws in boost
socket_.set_option( boost::asio::ip::multicast::join_group( multicast_addr ) );
这似乎不起作用。在另一端,连接接口上的 socat 或 tcpdump 不显示任何多播数据。如果我在这个接口上的两台服务器之间没有交换机或路由器,这还能工作吗?加入群永远不会被听到?
原来选项 hops 0 是之前设置的,这是所有人的邪教,我没有看到。我只需要在发送前将 bind() 绑定到接口,不需要任何其他设置就可以了。
// cultpit
// socket.set_option( boost::asio::ip::multicast::hops(0) );
socket_.set_option( boost::asio::ip::udp::socket::reuse_address( true ) );
socket_.bind( boost::asio::ip::udp::endpoint(
boost::asio::ip::address_v4::from_string( "172.16.1.2" ), 0 ) );