2010-08-17 83 views
2

我正在使用recvfrom接收來自網絡的多播消息。 系統上有兩個網絡接口,recvfrom只接收來自第一個接口。 當第二個接口功能正常時,recvfrom被無限期阻塞,並在切換到第一個接口後才接收數據包。 SO_REUSEADDR在打開套接字時用於設置選項。刪除這也無濟於事。 任何想法?? 我被卡住了。recvfrom卡在一個接口上

+0

您是否希望能夠從兩個接口或僅一個接收?如果只有一個,試着將你的套接字綁定到該接口的地址,而不是默認爲「any」。 – 2010-08-17 13:51:47

+1

嗨, 我將它綁定到INADDR_ANY並期望在任一接口上接收多播,無論哪一個處於活動狀態。 但recevfrom只能在一個接口上工作,並在另一個接口處於活動狀態時卡住。 – Rohith 2010-08-17 15:07:14

回答

0

我會爲每個接口創建一個套接字,並顯式綁定到接口,而不是使用INADDR_ANY

使用INADDR_ANY的問題是,一旦收到數據報,套接字可能會隱式綁定到數據報到達的接口上,恕我直言,它必須是這樣的,以便您可以從數據報的接口發送響應抵達...

0

我能夠通過在組播套接字上使用DROP_MEMBERSHIP和ADD_MEMBERSHIP來解決此問題,無論何時更改網絡接口。 我還必須對套接字庫進行更改,最初它用於返回第一個可用的具有多播功能的接口(即使未分配IP)以返回啓用了多播並且也分配了IP地址的接口。

相關問題