簡體   English   中英

從 macOS 上的單個網絡接口接收多播 UDP 數據包

[英]Receiving multicast UDP packets from a single network interface on macOS

這是一個 macOS 問題。 我正在嘗試設置一個 UDP 套接字,用於接收發送到多播地址的 SSDP 消息,即 UDP 數據包。 我想限制從單個網絡接口接收這些數據包。

我試過

int fd = socket(AF_INET, SOCK_DGRAM, 0);  
char* itf = "en0";
int res = setsockopt(fd, SOL_SOCKET, IP_RECVIF, itf, strlen(itf));

setsockopt 調用失敗, errno 42 (協議不可用)。 我還發現了可以用於相同目的的SO_BINDTODEVICE ,但似乎這在 macOS 上不可用。

使用帶有端口和地址的綁定也不起作用。 然后在該套接字上不會收到發送到多播地址的數據包。

關於 IP 多播OSX 文檔中...

主機必須先成為多播組的成員,然后才能接收發送到該組的數據報。 要加入多播組,請使用 IP_ADD_MEMBERSHIP 選項...

要在特定接口上接收多播流量,您需要告訴操作系統您要加入該多播組。 請按照以下步驟操作(您幾乎就在那里)...

  1. 創建數據報套接字(完成)。
  2. 使用預期端口綁定到INADDR_ANY
  3. 通過setsockopt()IP_ADD_MEMBERSHIP選項加​​入多播組。 在這里,您可以在ip_mreq結構中傳遞您希望接收多播流量的特定網絡接口的 IP 地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM