当前位置:  开发笔记 > 编程语言 > 正文

在Linux上进行多播时选择接口

如何解决《在Linux上进行多播时选择接口》经验,为你挑选了1个好方法。

我正在使用运行Debian 4的大约40个节点的集群.每个节点都运行一个守护程序,该守护程序位于并侦听多播IP.

我写了一些客户端软件,通过局域网发送多播,客户端计算机与集群在同一台交换机上,这样集群中的每个节点都会收到数据包并做出响应.

它运行良好,除非我在具有LAN和WAN接口的计算机上运行客户端软件.如果存在WAN接口,则多播不起作用.显然,我认为组播错误地通过WAN接口(eth0),而不是LAN(eth1.)所以,我使用SO_BINDTODEVICE套接字选项强制组播套接字使用eth1,一切都很好.

但我认为内核的路由表应该确定LAN(eth1)显然是组播的低成本目的地.有什么理由我必须明确强制套接字使用eth1吗?并且,是否有某种方式(可能是ioctl调用)我可以让应用程序自动确定特定接口是LAN还是WAN?



1> Steve-o..:

如果您没有明确绑定到接口,我相信Linux使用接口作为多播发送的默认单播路由.

Linux需要多播路由,如果不存在,则会出现EHOSTUNREACH或ENETUNREACH错误.该LCM项目文档这个问题:如果使用套接字选项IP_MULTICAST_IF或IPV6_MULTICAST_IF,则将覆盖路由.您应该能够通过IPv6地址中的scope-id字段指定接口,但并非所有平台都能正确支持它.正如dameiss所指出的,Stevens的Unix网络编程书涵盖了这些细节,您可以免费浏览通过Google Books进行多播的大部分章节.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有