servidor - dns manual
Usando glibc, ¿por qué mi gethostbyname falla después de que I/DHCP ha cambiado el servidor DNS? (1)
Resulta que glibc gethostbyname_r no volverá a cargar automáticamente su configuración si esa configuración cambia. Tienes que llamar manualmente a res_init. Vea el informe de errores a continuación.
Nota: Ni la página del manual para gethostbyname_r ni para rer_init mencionaron esta limitación.
Mi solución es muy específica. Funciona para nuestro servidor de larga ejecución, pero no es mi solución ideal.
Tengo una función que verifica el mtime del /etc/resolv.conf contra el último mtime conocido (0 para DNE). Si los dos mtime difieren, entonces llamo a res_init. Esta función se invoca al inicio del programa y luego periódicamente para volver a cargar la configuración.
El informe de errores glibc
libc almacena en caché resolv.conf para siempre
...
Para eso res_init () es, llámalo.
Si nuestro servidor (que se ejecuta en un dispositivo) se inicia antes de que se haya adquirido una concesión de DHCP, entonces nunca podrá conectarse utilizando un nombre de host.
Si eso sucede, puede encontrar hosts por dirección IP pero no por DNS.
Inicialmente pensé que el caché de DNS de Curl había fallado debido a que las conexiones curl fallaban. Pero utilicé CURLOPT_DNS_CACHE_TIMEOUT para evitar que curl cachee la dirección pero las conexiones aún fallaron.