如何使用 libuv 执行 DNS 查找?

How do I perform a DNS look-up using libuv?

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

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

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] = { '[=10=]' };
    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] = { '[=10=]' };
    uv_ip6_name((sockaddr_in6*)(addrinfo.ai_addr), c, 39);
    std::cout << c << std::endl;
}

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

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