【发布时间】:2018-09-05 05:53:06
【问题描述】:
setsockopt 为 IPv4 的传出流量选择接口的方法是 IP_MULTICAST_IF,它接受两个参数。来自ip(4) 手册页:
为多播套接字设置本地设备。论据
setsockopt(2)是ip_mreqn或(自 Linux 3.5 起)ip_mreq类似于IP_ADD_MEMBERSHIP或in_addr结构的结构。
当尝试对 IPv6 流量执行类似操作时,该选项会更改为接口索引。来自ipv6(4) 手册页:
在套接字上设置用于传出多播数据包的设备。 这仅适用于
SOCK_DGRAM和SOCK_RAW套接字。这 参数是一个指向接口索引的指针(参见netdevice(7)) 整数。
如果网络接口(例如eth0)分配有多个地址,会发生什么情况?是不是 IPv6 的 socket 接口去掉了单独使用每个地址的可能性?
【问题讨论】:
-
因此在发布的情况下添加成员资格是不相关的,这是 IP_MULTICAST_IF 在这种情况下解决的问题。我的问题是:给定一个具有多个地址的接口,在 IPv4 中,您可以在特定地址上发布。鉴于 IPv6,此功能似乎不存在:为什么?有没有办法获得功能?
标签: c linux sockets ipv6 multicast