【发布时间】:2010-02-06 12:44:41
【问题描述】:
我正在使用一个由大约 40 个节点组成的集群运行 Debian 4。每个节点都运行一个守护程序,该守护程序位于并侦听多播 IP。
我编写了一些客户端软件,通过 LAN 发送多播,客户端计算机与集群位于同一交换机上,这样集群中的每个节点都会收到数据包并做出响应。
效果很好,除非我在具有 LAN 和 WAN 接口的计算机上运行客户端软件。如果有 WAN 接口,则多播不起作用。所以很明显,我认为多播错误地通过 WAN 接口 (eth0),而不是 LAN (eth1)。所以,我使用 SO_BINDTODEVICE 套接字选项强制多播套接字使用 eth1,一切都很好。
但我认为内核的路由表应该确定 LAN (eth1) 显然是多播的成本较低的目的地。是否有某些原因我必须明确强制套接字使用 eth1?而且,是否有某种方式(可能是 ioctl 调用)可以让应用程序自动确定特定接口是 LAN 还是 WAN?
【问题讨论】:
-
不,内核和套接字 API 不会自动为您处理这个问题。如果您可以发布一些有助于人们以不同方式编程套接字的代码。基本上,一种方法是检查每个接口并确定它是否使用不可 Internet 路由的 IP 地址。或者,您可以通过所有接口发送。
标签: multicast