首页 文章

从macOS上的单个网络接口接收多播UDP数据包

提问于
浏览
1

这是一个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上不可用 .

使用绑定端口和地址也不起作用 . 然后,在该套接字上没有收到发送到多播地址的数据包 .

1 回答

  • 1

    来自OSX documentation on IP multicast ......

    主机必须先成为多播组的成员,然后才能接收发送给该组的数据报 . 要加入多播组,请使用IP_ADD_MEMBERSHIP选项...

    要在特定接口上接收多播流量,您需要告诉操作系统您要加入该多播组 . 按照这些步骤(你几乎在那里)......

    • 创建数据报套接字(完成) .

    • 与预期端口绑定到 INADDR_ANY .

    • 使用 IP_ADD_MEMBERSHIP 选项通过 setsockopt() 加入多播组 . 在这里,您可以传递希望在 ip_mreq 结构中接收多播流量的特定网络接口的IP地址 .

相关问题