使用 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。他们活跃了很多年。由于可移植性问题,此功能请求仍未解决。
有解决方法:
- for
multicast
-> 绑定到多播地址。
- for
unicast
-> 绑定到具体的本地接口,1 个接口 - 1 个套接字。 但请记住,这样做动态地址可能会成为陷阱
快速搜索显示了一个类似的问题:
Get destination address of a received UDP packet
可以直接调用系统的API获取信息,不需要绑定具体地址
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。他们活跃了很多年。由于可移植性问题,此功能请求仍未解决。
有解决方法:
- for
multicast
-> 绑定到多播地址。 - for
unicast
-> 绑定到具体的本地接口,1 个接口 - 1 个套接字。 但请记住,这样做动态地址可能会成为陷阱
快速搜索显示了一个类似的问题: Get destination address of a received UDP packet 可以直接调用系统的API获取信息,不需要绑定具体地址