6

DHCPリースが取得される前にサーバー(デバイス上で実行されている)が起動した場合、ホスト名を使用して接続することはできません.

その場合、ホストは IP アドレスで検索できますが、DNS では検索できません。

curl接続が失敗したため、最初はCurl DNSキャッシュに問題があると思いました. しかし、CURLOPT_DNS_CACHE_TIMEOUTを使用してcurlがアドレスをキャッシュしないようにしましたが、接続はまだ失敗しました。

4

1 に答える 1

11

その構成が変更された場合、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() の目的です。呼び出します。

于 2008-09-24T04:58:27.667 に答える