我有两个网络接口(interface),并且正在尝试绑定(bind)到两个网络接口(interface)上的同一个 UDP 端口,但当我尝试绑定(bind)到第二个网络接口(interface) EADDRINUSE
时,出现错误。当我绑定(bind)到套接字时,我传递一个 sockaddr*
,我在其中设置了端口和要使用的唯一 IP 地址。
我必须使用套接字选项SO_REUSEADDR
吗?这是否允许在任一套接字上接收消息,或者它们是否会转到与其绑定(bind)的 IP 地址相匹配的套接字?
最佳答案
您可以bind(2)
一个插槽连接到 INADDR_ANY
,用于 IPv4或发送至in6addr_any
IPv6 (您不必这样做,但这是通常的方法)。这将使该单个套接字能够接受来自盒子上所有网络接口(interface)的数据包。
然后,SO_REUSEADDR
套接字选项将允许您将其他套接字绑定(bind)到更具体的地址,即单个接口(interface)和相同端口。
数据包将在绑定(bind)到与给定数据包的目标 IP 地址最匹配的地址的套接字上接收。
关于c++ - 如何在多个接口(interface)上绑定(bind)到同一个 UDP 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13505483/