Skip to content

Instantly share code, notes, and snippets.

@kisel
Created October 17, 2014 07:53
Show Gist options
  • Save kisel/0943da4d3a36bb068dd0 to your computer and use it in GitHub Desktop.
Save kisel/0943da4d3a36bb068dd0 to your computer and use it in GitHub Desktop.
// gcc -I . -L./.libs -lcares ares-custom-dns-test.c;
#include <ares.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdarg.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
static void
callback(void *arg, int status, int timeouts, struct hostent *host)
{
if(!host || status != ARES_SUCCESS){
printf("Failed to lookup %s\n", ares_strerror(status));
return;
}
char ip[INET6_ADDRSTRLEN];
int i = 0;
for (i = 0; host->h_addr_list[i]; ++i) {
inet_ntop(host->h_addrtype, host->h_addr_list[i], ip, sizeof(ip));
printf("%s\n", ip);
}
}
static void
wait_ares(ares_channel channel)
{
for(;;){
struct timeval *tvp, tv;
fd_set read_fds, write_fds;
int nfds;
FD_ZERO(&read_fds);
FD_ZERO(&write_fds);
nfds = ares_fds(channel, &read_fds, &write_fds);
if(nfds == 0){
break;
}
tvp = ares_timeout(channel, NULL, &tv);
select(nfds, &read_fds, &write_fds, NULL, tvp);
ares_process(channel, &read_fds, &write_fds);
}
}
int
main(void)
{
ares_channel channel;
int status = 0;
struct ares_options options = {};
int optmask = 0;
status = ares_library_init(ARES_LIB_INIT_ALL);
if (status != ARES_SUCCESS){
printf("ares_library_init: %s\n", ares_strerror(status));
return 1;
}
status = ares_init(&channel);
if(status != ARES_SUCCESS) {
printf("ares_init: %s\n", ares_strerror(status));
return 1;
}
// set google DNS servers
status = ares_set_servers_csv(channel, "8.8.8.8,8.8.4.4");
if(status != ARES_SUCCESS) {
printf("ares_set_servers_csv: %s\n", ares_strerror(status));
return 1;
}
ares_gethostbyname(channel, "hetester.herokuapp.com", AF_INET, callback, NULL);
wait_ares(channel);
ares_destroy(channel);
ares_library_cleanup();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment