diff --git a/src/dns/res.c b/src/dns/res.c index 7df3d468d..abf2ada6d 100644 --- a/src/dns/res.c +++ b/src/dns/res.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "dns.h" @@ -46,10 +47,28 @@ int get_resolv_dns(char *domain, size_t dsize, struct sa *nsv, uint32_t *n) } err = 0; +#ifdef DARWIN + int memsize = state.nscount * sizeof(union res_sockaddr_union); + union res_sockaddr_union *addr = mem_alloc(memsize, NULL); + int servers = res_getservers(&state, addr, state.nscount); + + for (i = 0; i < min(*n, (uint32_t)servers) && !err; i++) { + if (addr[i].sin.sin_family == AF_INET) + err |= sa_set_sa(&nsv[i], + (struct sockaddr *)&addr[i].sin); + else if (addr[i].sin6.sin6_family == AF_INET6) + err |= sa_set_sa(&nsv[i], + (struct sockaddr *)&addr[i].sin6); + else + (void)re_fprintf(stderr, "Undefined family.\n"); + } + mem_deref(addr); +#else for (i=0; i