【问题标题】:How do I perform a DNS look-up using libuv?如何使用 libuv 执行 DNS 查找?
【发布时间】:2017-10-09 13:41:36
【问题描述】:

我正在尝试使用 将 URL 解析为 IP 地址。我正在使用函数uv_getaddrinfo,它将addrinfo 对象传递给我的回调。

这个回调是我收到 IP 地址的地方吗?如何从addrinfo 对象中提取 IP 地址?

【问题讨论】:

  • 因为这是 C,所以它不是真正的“对象”,而是“结构”。这种差异可能看起来很学术,但从编程的角度来看它很重要。

标签: libuv c dns libuv


【解决方案1】:

utility functions 是针对此的,例如 uv_ipv4_addruv_ipv4_name,具体取决于您想要从该结构中打破什么。

许多 LibUV 函数直接采用 addrinfo,所以它是一个有用的结构。


libuv 提供uv_ipv4_nameuv_ipv6_name。您选择的函数取决于您拥有的addrinfo 对象:

if (addrinfo.ai_family == AF_INET) {
    // ipv4
    char c[17] = { '\0' };
    uv_ip4_name((sockaddr_in*)(addrinfo.ai_addr), c, 16);
    std::cout << c << std::endl;
} else if (addrinfo.ai_family == AF_INET6) {
    // ipv6
    char c[40] = { '\0' };
    uv_ip6_name((sockaddr_in6*)(addrinfo.ai_addr), c, 39);
    std::cout << c << std::endl;
}

您可能会从 uv_getaddrinfo 获得多个 addrinfo 结构。这些存储在一个单链表中,其中“下一个”指针是addrinfo.ai_next

这也很有帮助:What is the difference between struct addrinfo and struct sockaddr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2012-01-06
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多