DNSサーバーはホスト名をIPアドレスに解決します。私が正しい場合、プログラムはgetaddrinfo()
DNSサーバーを呼び出し、それを確認するために呼び出してホスト名をIPアドレスに解決できます。
SysV initには、DNSサーバーのようにサービス名をポートに解決するデーモンはありますか?読書を通してそうなりますか/etc/services
?getaddrinfo()
解析を実行するためにデーモンも呼び出されますか?
私はinetd
読書が/etc/services
どのソケットを受け取るかを決定することを知っています。しかし、inetd
サービス名をポートとして解決するようなものではありません。そうですか?
ありがとうございます。
答え1
DNSはgetaddrinfo()
定義されている場合にのみ呼び出されます。nsswitch.conf
このfiles
トピックはから直接読みます/etc/hosts
。
基本的に「ネームサービス切り替え」機能(NSS)を見て、/etc/nsswitch.conf
おそらく動的ローディング「libnss」ルーチン。たとえば、で述べた/lib/x86_64-linux-gnu/libnss_files.so.2
ときにロードされるライブラリがあるかもしれません。files
nsswitch.conf
ホストの場合、そのnsswitch.conf
行は次のように読み取ることができます。
hosts: files dns
これは、ネームサービスリゾルバに "nss_files"ライブラリ(から取得/etc/hosts
)をロードするか、失敗した場合は "nss_dns"ライブラリをロードするように指示します。それそれDNS サーバーを呼び出すライブラリです。
サービスの場合、nsswitch.conf 行は次のようになります。
services: files ldap
これにより "nss_files" ライブラリ ( で検索された/etc/services
) がロードされ、ロードが失敗すると "nss_ldap" ライブラリがロードされます。
名前解決方法を決定するさまざまなバックエンド(file、db、ldap、nis、compat、dns...)があります。
inet
次の項目の場合
service time
{
...
}
time
NSSマップで照会する値services
。files
inを使用するとnsswitch.conf
線が見えます。
time 37/tcp timserver
inetd
TCPポート37にバインドするように指示します。