getaddrinfoで失敗する
環境はLinuxで、DNSによる名前解決のために getaddrinfo を、呼ぶのだがエラーで帰る。/etc/resov.confをみるとDNSの設定は正しい。gai_strerror というAPIでエラーコードの説明を見てみると
Name or service not known
が返っている。困ったことに、nslookupは通る。DNSの設定は正しい。なぜだ。どういうことだ。
しばらく悩んで、/etc/hosts.conf を見つける。そういえばこんなものがあったよな、hostsファイルとDNSの検索の優先順位をここで指定するはずだ。よっしゃ!
と、思って試してみたが、NG
なぜだ。どういうことだ。
しばらくgoogle先生と格闘して、/etc/nsswitch.conf を見つけた。
どうやら、最近のLinuxではhostsとdnsの検索順はこちらで指定するのがデフォルトらしい。じゃあ、/etc/hosts.confの存在意義って。。
/etc/nsswitch.conf filesをコメントにして、files dnsにする # hosts: files hosts: files dns
ファイルを保存後、getaddrinfoを呼び出したところ(呼ぶプログラムを実行したところ)すぐに効果は現れた。保存後特にサービスの再起動などもいらないらしい。
nslookupやdigは直接、DNSを見に行くらしく、nsswitch.confの参照順序とか関係ないんだそうな。