Mit glibc, warum meine gethostbyname fehlschlagen, nachdem ich / DHCP den DNS-Server hat sich geändert?

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

  •  02-07-2019
  •  | 
  •  

Frage

Wenn unser Server (auf einem Gerät ausgeführt wird) beginnt, bevor eine DHCP-Lease erworben worden war, dann kann es nie verbindet einen Hostnamen verwenden.

Wenn das passiert es Hosts nach IP-Adresse finden, aber nicht durch DNS.

Ich dachte zunächst, dass der Curl-DNS-Cache schuldhaft gehandelt hat, da die curl-Verbindungen fehlgeschlagen. Aber ich verwenden CURLOPT_DNS_CACHE_TIMEOUT curl von Caching-Adresse zu verhindern, aber Verbindungen noch immer nicht.

War es hilfreich?

Lösung

Es stellt sich heraus, dass glibc gethostbyname_r nicht automatisch neu geladen, es ist Konfiguration, wenn diese Konfigurationsänderungen. Sie müssen res_init manuell aufrufen. Siehe Bugreport unten.

. Hinweis: Weder die Manpage gethostbyname_r noch für rer_init diese Einschränkung erwähnt

Meine Lösung ist sehr spezifisch. Es funktioniert für unseren langen laufenden Server, aber es ist nicht meine ideale Lösung.

Ich habe eine Funktion, die die mtime der /etc/resolv.conf gegen die letzte bekannte mtime (0 für DNE) überprüft. Wenn die beiden mtime unterscheiden sich dann res_init Ich nenne. Diese Funktion beim Programmstart aufgerufen wird und dann die Konfiguration in regelmäßigen Abständen, um optional neu zu laden.


Die glibc Bugreport

  

libc Caches resolv.conf für immer

     

...

     

Das ist, was res_init () ist für, es nennt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top