2017-01-27 5 views
0

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にマルチキャストメッセージを送信させる方法を知っていますか?

答えて

0

通常ソケットにソケットをバインドするのは、となり、ソケット寿命はになります。 BoostやOSでさえ、テストされていないので、ソケットが別のインターフェースに再バインドされているケースは動作していないと思います。

初めてWiFiインターフェイスにバインドせずに有線インターフェイスを試してみたらどうなりますか?これがうまくいけば、あなたはバグを発見し、回避策を知っています。

関連する問題