2012-11-22 248 views
2

我有兩個網絡接口,並試圖綁定到它們上的同一UDP端口,但當我嘗試綁定到第二個接口時,出現錯誤EADDRINUSE。當我綁定到套接字時,我通過了一個sockaddr*,我在其中設置了要使用的端口和唯一IP地址。如何綁定到多個接口上的同一UDP端口

我必須使用插座選項SO_REUSEADDR嗎?這將允許在任一套接字上接收消息,還是將它們放入與其綁定的IP地址相匹配的套接字?

+1

你可以顯示代碼嗎?沒有看到它,很難說什麼。 –

回答

1

您可以bind(2)一個插座INADDR_ANYIPv4in6addr_anyIPv6(你不就得了,但是這是通常的做法)。這將使單個套接字能夠接受來自盒子上所有網絡接口的數據包。

然後SO_REUSEADDR套接字選項可以讓你到其他的插座綁定到更具體地址,即以單個接口,並且同一個端口。

將在與最大匹配給定數據包的目標IP地址的地址綁定的套接字上接收數據包。

+0

因此,是否需要爲'any'創建1個套接字,併爲特定地址創建多個套接字? –

+0

您可以爲所有接口執行一個套接字。這很容易。如果處理/功能不同,則只需要不同的套接字,或者需要分隔應用程序(如在託管環境中)。 –

相關問題