Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有两个网络接口,并试图在它们上绑定到相同的 UDP 端口,但是当我尝试绑定到第二个时出现错误,EADDRINUSE. 当我绑定到套接字时,我传递了一个sockaddr*设置端口和要使用的唯一 IP 地址的位置。
EADDRINUSE
sockaddr*
我必须使用套接字选项SO_REUSEADDR吗?这将允许在任一套接字上接收消息,还是将它们转到与其绑定的 IP 地址匹配的套接字?
SO_REUSEADDR
您可以为IPv4或IPv6提供bind(2)一个套接字(您不必这样做,但这是通常的方法)。这将使该单个套接字能够接受来自盒子上所有网络接口的数据包。INADDR_ANYin6addr_any
bind(2)
INADDR_ANY
in6addr_any
然后SO_REUSEADDR套接字选项将允许您将其他套接字绑定到更具体的地址,即单独的接口和相同的端口。
数据包将在绑定到与给定数据包的目标 IP 地址最匹配的地址的套接字上接收。