Tengo un código que estoy escribiendo bajo cygwin (usando GCC) que usa con éxito gethostbyname(); sin embargo, cuando trato de usar el resolver directamente para recuperar la dirección IP del servidor DNS, falla (todas las entradas en nsaddr_list [] son nulas y nscount es -1). Si gethostbyname() está funcionando, entonces obviamente puede conectarse al servidor DNS.
Este código ...¿Cómo obtiene gcc/cygwin el servidor DNS?
if (res_init() == -1) {
fprintf(stderr,"res_init() failed\n");
exit(1);
}
if (_res.nscount <= 0) {
fprintf(stderr,"nscount = %d\n",_res.nscount);
}
else {
for(i=0;i<_res.nscount;i++) {
fprintf(stderr, "dnssrvr: %d.%d.%d.%d\n",
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff) >> 0,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff00) >> 8,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff0000) >> 16,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff000000) >> 24);
}
}
obras en Unix/Linux, pero vuelve NSCOUNT = -1 en cygwin. ¿Hay algún truco para obtener el servidor DNS cuando se usa cygwin/gcc?
Como un aparte, puede usar '{char buf [INET_ADDRSTRLEN]; fprintf (stderr, "dnssrvr:% s \ n", inet_ntop (AF_INET, & _res.nsaddr_list [i] .sin_addr, buf, sizeof buf)); } 'para formatear la dirección IP. – caf
Buen punto, mucho más limpio. Gracias. –