【问题标题】:Multicasting through all network interfaces by setting IP_MULTICAST_IF?通过设置 IP_MULTICAST_IF 通过所有网络接口进行多播?
【发布时间】:2012-11-20 15:00:20
【问题描述】:

我需要通过机器中所有具有多播功能的接口多播一个数据包。通过使用 setsockopt() 设置 IP_MULTICAST_IF,我可以选择通过哪个接口多播我的数据包。不幸的是,我只能选择一个(不能吗?)。一个可能的解决方案是设置 IP_MULTICAST_IF,通过该接口多播数据包重置 IP_MULTICAST_IF,发送另一个数据包等等。不幸的是,套接字连接时无法修改套接字选项......我的问题有什么可能的解决方案?

【问题讨论】:

  • 你为什么要connectsocket?
  • 您可能的解决方案(在发送每个数据包之前更改 IP_MULTICAST_IF 设置)对我来说很好。不过,Steve-o 是对的,如果您在多播套接字上调用 connect() 是错误的,因为这意味着套接字将丢弃来自任何源的传入数据包,而不是套接字连接到的源。 ..在多播情况下,这通常不是您想要的。请改用 sendto() 和 recvfrom()。

标签: c linux sockets networking


【解决方案1】:

最简单的解决方案是每个接口都有一个套接字,但我会质疑您的网络设置,您“需要通过所有接口多播数据包” - 这通常是设计不佳的标志。

【讨论】:

  • 如果程序的目标是发现有哪些多播侦听器,如果不在每个连接的接口上发送多播数据包,您将如何做到这一点?
  • 是的,我想这可能对服务发现有意义。
  • 没错。几年前我为 Jini 贡献了一个补丁,正是这样做的。在多宿主主机中,这是必不可少的。
  • EJP:您能详细说明一下您是如何解决问题的吗?
  • +1。枚举您的接口(例如,使用开源 getifaddrs 包装器添加对每个操作系统的支持),然后每个接口都有一个套接字。这就是我为我的 UPnP 库所做的。
猜你喜欢
  • 1970-01-01
  • 2014-09-03
  • 2019-01-08
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多