首页 文章

bind() - 将UDP套接字连接到不同的地址

提问于
浏览
1

我有一个非常简单的问题,我无法在任何地方找到答案:

使用Linux C套接字,是否可以在本地地址以外的IP地址上绑定()然后recvfrom()UDP数据包?

即,如果主机已获得LAN地址10.0.0.4,并且我希望它能够接收发送到端口5505上的地址10.0.0.5的UDP数据包(例如)如何实现?

我根本找不到任何使用bind / recvfrom的例子,这似乎应该是相当平常的 .

Update

我试图在多个主机之间传递数据包流 . 每个主机在其自己的地址上传输UDP数据包,并且任何其他主机都可以通过recvfrom()在特定地址上进行侦听 .

1 回答

  • 2

    不,您通常不能绑定到非本地单播地址 . 在以太网上,此类数据包将被寻址到该IP地址所有者的硬件地址,默认情况下,NIC甚至不会将此类数据包转发到您的内核 .

    您可以使用IP多播来实现所需的效果 . 您将为应用程序选择一个特定的多播地址并绑定到该地址,然后使用 IP_ADD_MEMBERSHIP 套接字选项加入多播组 . 然后,您可以按常规方式使用 recvfrom() .

相关问题