2017-10-09 132 views
0

我正在嘗試使用將URL解析爲IP地址。我正在使用功能uv_getaddrinfo,它將addrinfo對象傳遞給我的回叫。如何使用libuv執行DNS查找?

這是我回收IP地址的回調嗎?我如何從addrinfo對象中提取IP地址?

+0

由於這是C它不是一個真正的「對象」,而是一個「結構」。這種差異似乎看起來很有學術價值,但從編程的角度來看這很重要。 – tadman

回答

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得到multple addrinfo結構。這些存儲在一個單鏈表中,其中「下一個」指針是addrinfo.ai_next

這也是有幫助的:What is the difference between struct addrinfo and struct sockaddr