2012-11-22 253 views
2

我有两个网络接口,并试图绑定到它们上的同一UDP端口,但当我尝试绑定到第二个接口时,出现错误EADDRINUSE。当我绑定到套接字时,我通过了一个sockaddr*,我在其中设置了要使用的端口和唯一IP地址。如何绑定到多个接口上的同一UDP端口

我必须使用插座选项SO_REUSEADDR吗?这将允许在任一套接字上接收消息,还是将它们放入与其绑定的IP地址相匹配的套接字?

+1

你可以显示代码吗?没有看到它,很难说什么。 –

回答

1

您可以bind(2)一个插座INADDR_ANYIPv4in6addr_anyIPv6(你不就得了,但是这是通常的做法)。这将使单个套接字能够接受来自盒子上所有网络接口的数据包。

然后SO_REUSEADDR套接字选项可以让你到其他的插座绑定到更具体地址,即以单个接口,并且同一个端口。

将在与最大匹配给定数据包的目标IP地址的地址绑定的套接字上接收数据包。

+0

因此,是否需要为'any'创建1个套接字,并为特定地址创建多个套接字? –

+0

您可以为所有接口执行一个套接字。这很容易。如果处理/功能不同,则只需要不同的套接字,或者需要分隔应用程序(如在托管环境中)。 –

相关问题