如何使用 libuv 执行 DNS 查找?
How do I perform a DNS look-up using libuv?
我正在尝试使用 libuv 将 URL 解析为 IP 地址。我正在使用函数 uv_getaddrinfo
,它将一个 addrinfo
对象传递给我的回调。
这个回调是我接收IP地址的地方吗?如何从 addrinfo
对象中提取 IP 地址?
有 utility functions 专门针对此,例如 uv_ipv4_addr
和 uv_ipv4_name
,具体取决于您想要打破该结构的内容。
许多 LibUV 函数直接采用 addrinfo
,因此它是一个有用的结构。
libuv 提供uv_ipv4_name
和uv_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
我正在尝试使用 libuv 将 URL 解析为 IP 地址。我正在使用函数 uv_getaddrinfo
,它将一个 addrinfo
对象传递给我的回调。
这个回调是我接收IP地址的地方吗?如何从 addrinfo
对象中提取 IP 地址?
有 utility functions 专门针对此,例如 uv_ipv4_addr
和 uv_ipv4_name
,具体取决于您想要打破该结构的内容。
许多 LibUV 函数直接采用 addrinfo
,因此它是一个有用的结构。
libuv 提供uv_ipv4_name
和uv_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