【发布时间】:2011-07-13 23:26:34
【问题描述】:
收到 UDP 数据包后,我需要用他用来发送我要回复的数据包的地址来回复发件人。
recvfrom 调用让我获得了发送者的地址,但我如何获得接收到的数据包的目标地址,该地址应该与本地主机接口之一的地址匹配?
【问题讨论】:
-
@sarnold:
getsockname在绑定到0.0.0.0:0(或[::]:0)的侦听套接字上没有那么有用。使用 TCP,您在accept之后有一个本地地址,但使用 UDP……我不知道如何回答 OP 的问题。 -
@ephemient,当马特第一次问这个问题时,我建议连接他的 UDP 套接字,这样他就可以使用
getsockname(2)。听起来它会奏效:) 现在我个人的利益就是要为他找到解决方案。 :) -
顺便说一下,另一种方法是为每个接口创建一个单独的 UDP 套接字,绑定到每个接口。然后你接收数据的套接字直接与接收数据的接口相关联。
-
@JasonC 这不是重复的。目标地址和目标接口是两个不同的东西。一个接口可以有并且经常有多个地址。至少在 Linux 上,一个地址可以分配给两个接口,尽管我不知道有什么好的用例。
标签: linux networking udp ipv4