我有一段代码在 Mac 上的每个以太网网络接口上发送多播消息(因为响应的设备可能在 wifi 或有线以太网连接上)。这段代码已经运行了很长一段时间:
for(int i = 0; i < strIPAddresses.size(); i++)
{
boost::asio::ip::address addr;
addr.from_string(strIPAddresses[i]);
m_pcDiscoverySocket->set_option(boost::asio::ip::multicast::outbound_interface(addr.to_v4()));
m_pcDiscoverySocket->send_to(boost::asio::buffer((void*)pGetDeviceInfoMessage->m_pchData, pGetDeviceInfoMessage->m_ulDataSize), senderEndpoint);
}
其中 strIPAddresses 是每个网络接口的 IP 地址的字符串数组。
但是,在 macOS 10.12 中,此代码的实现方式发生了一些变化,它似乎忽略了设置出站接口的功能,并自行决定发送消息的最佳接口。我可以在另一台机器上使用 Wireshark 看到这一点 - 当第二条消息应该通过有线接口发送时,它会通过 wifi 看到每条消息的两倍。
有谁知道强制macOS在给定接口上发送多播消息的方法,最好使用Boost ASIO?