Avec glibc, pourquoi mon gethostbyname échoue-t-il après le changement de serveur DNS par I / DHCP?

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

  •  02-07-2019
  •  | 
  •  

Question

Si notre serveur (fonctionnant sur un périphérique) démarre avant l'acquisition d'un bail DHCP, il ne pourra jamais se connecter à l'aide d'un nom d'hôte.

Si cela se produit, il peut trouver des hôtes par adresse IP mais pas par DNS.

Je pensais au départ que le cache DNS Curl était en cause lorsque les connexions Curl ont échoué. Mais j'ai utilisé CURLOPT_DNS_CACHE_TIMEOUT pour empêcher Curl de mettre en cache l'adresse, mais les connexions ont quand même échoué.

Était-ce utile?

La solution

Il s'avère que la glibc gethostbyname_r ne rechargera pas automatiquement sa configuration si cette configuration change. Vous devez appeler manuellement res_init. Voir le rapport de bogue ci-dessous.

Remarque: Ni la page de manuel de gethostbyname_r ni celle de rer_init ne mentionnent cette limitation.

Ma solution est très spécifique. Cela fonctionne pour notre serveur de longue date mais ce n’est pas ma solution idéale.

J'ai une fonction qui vérifie le mtime du fichier /etc/resolv.conf par rapport au dernier mtime connu (0 pour DNE). Si les deux mtime diffère alors j'appelle res_init. Cette fonction est appelée au démarrage du programme, puis périodiquement pour recharger éventuellement la configuration.

La glibc rapport de bogue

  

libc cache résolv.conf pour toujours

     

...

     

C’est à cela que sert res_init (), appelez-le.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top