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の参照順序とか関係ないんだそうな。