我正在使用运行 Debian 4 的大约 40 个节点的集群。每个节点都运行一个守护程序,该守护程序位于并侦听多播 IP。
我编写了一些客户端软件,通过 LAN 与群集在同一交换机上的客户端计算机发送多播,以便群集中的每个节点都会接收数据包并做出响应。
它工作得很好,除非我在具有 LAN 和 WAN 接口的计算机上运行客户端软件。如果有 WAN 接口,则多播不起作用。很明显,我认为多播错误地通过 WAN 接口 (eth0),而不是 LAN (eth1)。所以,我使用 SO_BINDTODEVICE 套接字选项强制多播套接字使用 eth1,一切都很好。
但我认为内核的路由表应该确定 LAN (eth1) 显然是多播的成本较低的目的地。是否有某些原因我必须明确强制套接字使用 eth1?而且,是否有某种方式(可能是 ioctl 调用)可以让应用程序自动确定特定接口是 LAN 还是 WAN?