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