我有一个非常简单的问题,我似乎无法在任何地方找到答案:
使用 Linux C 套接字,是否可以在本地地址以外的 IP 地址上 bind() 然后 recvfrom() UDP 数据包?
即,如果主机已获得 LAN 地址 10.0.0.4,并且我希望它能够接收发送到端口 5505(例如)上地址 10.0.0.5 的 UDP 数据包,这将如何实现?
我根本找不到任何这种使用 bind/recvfrom 的例子,这看起来应该很常见。
更新
我正在尝试在多个主机之间传送数据包流。每台主机都在自己的地址上传输 UDP 数据包,任何其他主机都可以通过 recvfrom() 在特定地址上进行监听。
最佳答案
不,您通常不能绑定(bind)到非本地单播地址。在以太网上,此类数据包将被发送到该 IP 地址所有者的硬件地址,默认情况下,您的 NIC 甚至不会将此类数据包转发给您的内核。
使用IP Multicast可以达到你想要的效果。您将为您的应用程序选择一个特定的多播地址并绑定(bind)到该地址,然后使用 IP_ADD_MEMBERSHIP
套接字选项加入多播组。然后,您可以按常规方式使用 recvfrom()
。
关于c - bind()-ing UDP套接字到不同的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352046/