1
これはmacOSに関する質問です。私は、SSDPメッセージ、すなわちUDPパケットを受信してマルチキャストアドレスに送信するUDPソケットをセットアップしようとしています。これらのパケットを単一のネットワークインターフェイスから受信することを制限したいと思います。macOS上の単一のネットワークインターフェイスからマルチキャストUDPパケットを受信する
私はのsetsockoptコールがerrno 42
(プロトコルは使用できません)で失敗し
int fd = socket(AF_INET, SOCK_DGRAM, 0);
char* itf = "en0";
int res = setsockopt(fd, SOL_SOCKET, IP_RECVIF, itf, strlen(itf));
を試してみました。 同じ目的で使用できるSO_BINDTODEVICE
も見つかりましたが、これはmacOSでは利用できないようです。
ポートとアドレスのバインドを使用しても機能しません。マルチキャストアドレスに送信されたパケットは、そのソケットで受信されません。
多くのおかげで、問題を解決しました。私は実際にSwiftからGCDAsyncUdpSocketを使用しています。 'joinMulticastGroup()'メソッドはインターフェイスを第2のパラメータとして受け取ります。実装は、 'IP_ADD_MEMBERSHIP'で' setsockopt() 'を使うよりも実装が簡単です。誰かがあなたの答えに投票した理由は分かりません。 – Bokeh