【问题标题】:How to know target address and port when receiving a UDP packet with libuv?使用libuv接收UDP数据包时如何知道目标地址和端口?
【发布时间】:2016-11-21 19:45:21
【问题描述】:

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

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。有没有办法实现?

我需要这个来知道接收到的接口数据包,或者知道多播组。 Socket 监听 0.0.0.0:xxxx

【问题讨论】:

    标签: c++ c network-programming udp libuv


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      有一些解决方法:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我已经读过了。到处走动libuv 违反了可移植性!但在特定情况下它可能很有用。
        猜你喜欢
        • 1970-01-01
        • 2021-04-16
        • 2011-03-19
        • 1970-01-01
        • 2011-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多