Macのすべてのイーサネットネットワークインターフェイス上でマルチキャストメッセージを送信するコードがあります(応答するデバイスは、無線または有線イーサネット接続である可能性があります)。このコードはかなりしばらくの間、正常に動作されています:ブーストASIOを使用したMacOSの特定のインターフェイスへのマルチキャスト
strIPAddressesは、各ネットワークインタフェースのIPアドレスの文字列配列である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);
}
。
しかし、macOS 10.12では、このコードが実装されている方法が変更されており、送信インターフェイスの設定機能を無視してメッセージを送信するための最適なインターフェイスを決定するように見えます。私は別のマシンでWiresharkを使ってこれを見ることができます - それは、第2のメッセージが有線インタフェースを介して送信されるべきであるときにwifi経由で各メッセージの倍を見ることです。
誰かが、特定のインターフェイスで、好ましくはBoost ASIOを使用して、macOSにマルチキャストメッセージを送信させる方法を知っていますか?