parent
66483a3838
commit
0570a7ce7b
9 changed files with 88 additions and 29 deletions
@ -0,0 +1,40 @@ |
|||||||
|
#include <bakanet/core/dns_lookup.h> |
||||||
|
|
||||||
|
namespace Bk::Net { |
||||||
|
std::vector<std::string> dns_lookup(const std::string& host_name, IpVersion ipv) |
||||||
|
{ |
||||||
|
std::vector<std::string> output; |
||||||
|
struct addrinfo hints, *res, *p; |
||||||
|
char ip_address[INET6_ADDRSTRLEN]; |
||||||
|
memset(&hints, 0, sizeof hints); |
||||||
|
hints.ai_family = (int)ipv; |
||||||
|
hints.ai_socktype = SOCK_STREAM; |
||||||
|
|
||||||
|
if (getaddrinfo(host_name.c_str(), NULL, &hints, &res) != 0) |
||||||
|
{ |
||||||
|
output.push_back(""); |
||||||
|
return output; |
||||||
|
} |
||||||
|
|
||||||
|
for (p = res;p != NULL; p = p->ai_next) |
||||||
|
{ |
||||||
|
void* addr; |
||||||
|
if (p->ai_family == AF_INET) |
||||||
|
{ |
||||||
|
struct sockaddr_in* ipv4 = (struct sockaddr_in*)p->ai_addr; |
||||||
|
addr = &(ipv4->sin_addr); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
struct sockaddr_in6* ipv6 = (struct sockaddr_in6*)p->ai_addr; |
||||||
|
addr = &(ipv6->sin6_addr); |
||||||
|
} |
||||||
|
inet_ntop(p->ai_family, addr, ip_address, sizeof ip_address); |
||||||
|
output.push_back(ip_address); |
||||||
|
} |
||||||
|
|
||||||
|
freeaddrinfo(res); // free the linked list
|
||||||
|
|
||||||
|
return output; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in New Issue