使用 libuv 接收 UDP 数据包时如何知道目标地址和端口?

How to know target address and port when receiving a UDP packet with libuv?

uvlib UDP 接受以下类型的事件回调函数:

typedef void (*uv_udp_recv_cb)(uv_udp_t* handle,
                               ssize_t nread,
                               const uv_buf_t* buf,
                               const struct sockaddr* addr,
                               unsigned flags);

没有关于目标端口和地址的信息,如sent_to_addr。有什么办法可以实现吗?

我需要这个来知道在哪个接口上接收到数据包,或者知道多播组。套接字侦听 0.0.0.0:xxxx

IP_PKTINFO 有这样的信息,但 libuv 没有公开启用它的 API。

是的,@Inaki 是的。我在 node.js 存储库中找到了 issues。他们活跃了很多年。由于可移植性问题,此功能请求仍未解决。

有解决方法:

  1. for multicast -> 绑定到多播地址。
  2. for unicast -> 绑定到具体的本地接口,1 个接口 - 1 个套接字。 但请记住,这样做动态地址可能会成为陷阱

快速搜索显示了一个类似的问题: Get destination address of a received UDP packet 可以直接调用系统的API获取信息,不需要绑定具体地址