DHCPリースが取得される前にサーバー(デバイス上で実行されている)が起動した場合、ホスト名を使用して接続することはできません.
その場合、ホストは IP アドレスで検索できますが、DNS では検索できません。
curl接続が失敗したため、最初はCurl DNSキャッシュに問題があると思いました. しかし、CURLOPT_DNS_CACHE_TIMEOUTを使用してcurlがアドレスをキャッシュしないようにしましたが、接続はまだ失敗しました。
その構成が変更された場合、glibc gethostbyname_r はその構成を自動的にリロードしないことが判明しました。res_init を手動で呼び出す必要があります。以下のバグレポートを参照してください。
注: gethostbyname_r のマニュアル ページも rer_init のマニュアル ページも、この制限について言及していません。
私の解決策は非常に具体的です。長期稼働しているサーバーでは機能しますが、理想的なソリューションではありません。
/etc/resolv.conf の mtime を最後の既知の mtime (DNE の場合は 0) と照合する機能があります。2 つの mtime が異なる場合は、res_init を呼び出します。この関数は、プログラムの起動時に呼び出され、その後定期的に呼び出され、オプションで構成を再読み込みします。
glibcバグレポート
libc は resolv.conf を永久にキャッシュします
...
それが res_init() の目的です。呼び出します。