【问题标题】:Cannot bind to multicast address (Windows)无法绑定到多播地址 (Windows)
【发布时间】:2011-09-02 16:49:11
【问题描述】:

我正在尝试编写一个使用 Windows 套接字侦听多个多播组的应用程序。

我遇到的问题是,当我去绑定套接字时,如果我尝试绑定到多播组地址和端口,则会失败并显示 WSAEADDRNOTAVAIL。如果我改为绑定到 INADDR_ANY 和端口,那么我仍然可以接收发往同一端口的其他无关流量。

当我在 Linux 中实现同样的事情时,我没有遇到任何绑定到多播地址的问题(事实上,我看到它推荐了几个地方以避免端口获得不相关的流量)。

这只是在 Windows 套接字中不可用吗?我假设我可以通过使用 WSARecvFrom 并查看标头来自己过滤流量,但如果存在,我宁愿一个简单的解决方案。

此外,它在 Windows Server 2008 上运行。

【问题讨论】:

  • 我在使用 Windows 套接字时遇到了同样的问题。看起来 Windows 套接字不接受多播 IP 上的绑定,这使得阻止套接字从同一端口上的其他 IP 接收不相关的流量是不可能的。

标签: windows sockets multicast


【解决方案1】:

虽然 bind() 的 doc 没有说这不受支持,但它确实在备注中说:

对于多播操作, 首选方法是调用绑定 将套接字与 本地IP地址,然后加入 多播组....

也许这个方案会产生更好的结果?

【讨论】:

  • 是的,正如我在原始问题中提到的那样,您可以这样做,但是它不会阻止该套接字上的 recv 获取端口的单播数据。除了执行 WSARecvMsg 并检查数据包信息以查看真正的目标地址之外,我还没有找到解决方案。
  • 对不起,我认为带有 IP_ADD_MEMBERSHIP 的 setsockopt() 应该过滤掉套接字的非组流量,而不管 bind() 中指定的地址如何。
猜你喜欢
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 2016-11-11
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多