c++ - 如何在多个接口(interface)上绑定(bind)到同一个 UDP 端口

标签 c++ sockets udp bsd

我有两个网络接口(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/

相关文章:

客户端服务器与套接字C的基本通信

c++ - 对于 recvfrom 的 UDP 情况,缓冲区的大小是多少?

c++ - 类型 ** 的包装器的数组订阅运算符的返回类型是 *&?

c++ - 什么时候从列表中弹出的对象被销毁?

python - 逐行跟踪和记录 C++ 程序的执行情况

sockets - 我应该使用 IOCP 还是重叠的 WSASend/Receive?

c++ - 在 C++ 结构中,构造函数中的默认值和默认参数有什么区别?

c# - TCP 套接字通信限制

c++ - 绑定(bind)并连接的 Boost.Asio 数据报 (UDP) 套接字

node.js - 直播视频必须使用什么协议(protocol)?