使用 IPv4,我可以 bind() 到特定地址以选择将用于接收数据包的接口(在某些情况下,也可以发送,但这不是重点)。
在双栈 IPv6/IPV4 机器上我有这个问题:我可以创建一个 6 个套接字并使用它来接收 4 个流量,但是如果我想绑定到特定接口,我必须选择一个 IP 地址来绑定。
如果我绑定到 IPv6 地址,我将过滤掉所有 IPv4 流量,反之亦然。
如何从特定接口接收 IPv4 和 IPv6 流量?
如果您使用的是 Linux,您应该能够使用SO_BINDTODEVICE
套接字选项绑定到接口而不是特定的 IP 地址。它在套接字手册页中进行了描述。
没有标准的可移植接口用于将单个套接字绑定到未指定的地址并将范围限制为特定接口上的地址,更不用说同时选择性地要求强主机模型与该套接字进行通信。支持此功能的每个操作系统都有不同的做法。