Usando glibc, ¿por qué falla mi gethostbyname después de que I/DHCP haya cambiado el servidor DNS?

StackOverflow https://stackoverflow.com/questions/125466

  •  02-07-2019
  •  | 
  •  

Pregunta

Si nuestro servidor (que se ejecuta en un dispositivo) se inicia antes de adquirir una concesión DHCP, 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 la caché de DNS de Curl tenía la culpa porque las conexiones curl fallaron.Pero usé CURLOPT_DNS_CACHE_TIMEOUT para evitar que curl almacene en caché la dirección, pero las conexiones aún fallaron.

¿Fue útil?

Solución

Resulta que glibc gethostbyname_r no recargará automáticamente su configuración si esa configuración cambia.Tienes que llamar manualmente a res_init.Ver informe de error abajo.

Nota:Ni la página de manual de gethostbyname_r ni de rer_init mencionaron esta limitación.

Mi solución es muy específica.Funciona para nuestro servidor de larga duración, pero no es mi solución ideal.

Tengo una función que verifica el mtime de /etc/resolv.conf con el último mtime conocido (0 para DNE).Si los dos mtimes difieren, entonces llamo res_init.Esta función se llama al iniciar el programa y luego periódicamente para, opcionalmente, recargar la configuración.


el glibc informe de error

libc almacena en caché resolv.conf para siempre

...

Para eso está res_init(), llámalo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top