我有一个非常简单的问题,我无法在任何地方找到答案:
使用Linux C套接字,是否可以在本地地址以外的IP地址上绑定()然后recvfrom()UDP数据包?
即,如果主机已获得LAN地址10.0.0.4,并且我希望它能够接收发送到端口5505上的地址10.0.0.5的UDP数据包(例如)如何实现?
我根本找不到任何使用bind / recvfrom的例子,这似乎应该是相当普遍的。
更新
我正在尝试在多个主机之间传递数据包流。每个主机在其自己的地址上传输UDP数据包,并且任何其他主机都可以通过recvfrom()在特定地址上进行侦听。
答案 0 :(得分:2)
不,您通常无法绑定到非本地单播地址。在以太网上,此类数据包将被寻址到该IP地址所有者的硬件地址,默认情况下,NIC甚至不会将此类数据包转发到您的内核。
您可以使用IP多播获得所需的效果。您将为应用程序选择一个特定的多播地址并绑定到该地址,然后使用IP_ADD_MEMBERSHIP
套接字选项加入多播组。然后,您可以按常规方式使用recvfrom()
。