2011-08-30 24 views
3

我正在使用組播UDP消息。我需要將接收到的數據包的目標IP地址與通道的多播地址進行比較,接收器應該監聽以確保它不接收在不同多播信道上多播的消息。在增強庫中查找收到的UDP消息的目標IP地址

我知道我可以通過使用recvmsg()的UNIX套接字找到目標IP地址,然後執行此處提及的所有內容:Get destination address of a received UDP packet

但我一直在使用boost庫ASIO套接字,雖然有對應於recvfrom()funcn的receive_from(),但我找不到與recvmsg()類似的功能。任何人都可以幫助我在這裏..有沒有辦法找到在提升庫中接收到的數據包的目標IP地址?

回答

0

讓我們退後一步。你爲什麼認爲你需要查看目標地址並在用戶空間中進行過濾?操作系統不應該爲你做這件事嗎?可能它應該!

你實際上是否接收到你不想要的數據報?如果是這樣,很可能是因爲你沒有對監聽器進行足夠嚴格的設置。例如,您應該綁定並僅偵聽特定的多播組(地址),端口和接口。也許你忽略了指定某些部分?如果不是這樣,也許你會解釋發生了什麼事情讓你問這個問題。

+0

當一個多播數據包被路由器重定向到所有訂閱了該多播通道的接收者,並且如果在一臺機器上有多個接收器運行,它們都會收到這個數據包,而不是隻有一個特定的接收者該組播頻道。這部分是真的..它總是發生 – vinsal

+0

你是說你有不想接收多播數據的多播接收器嗎?這部分對我來說不是很清楚。如果他們不想收到這些數據,他們爲什麼要聽它呢? –

+0

由於接收者只能綁定到一個端口,而不是地址,所以在端口上偵聽的所有接收者(在同一臺機器上)都會收到這條消息,因爲他們不檢查dest。數據包的IP地址。 – vinsal

0

無法訪問目標地址的典型解決方法是爲每個多播組打開一個套接字並將套接字與應用程序中的地址相匹配。