基本的にgetaddrinfoを呼び出す小さなcプログラムがあります。/etc/hosts によると、localhost は "127.0.0.1" と "::1" に解決できます。
プログラムを実行すると、出力は次を使用してコンパイルおよびリンクしたかどうかによって異なります。
gcc -static test.c
$ a.out
127.0.0.1 2
gcc test.c
$ a.out
::1 10
127.0.0.1 2
どのシステム コールが実行されたかを確認しましたが、最初のケースでは構成ファイル /etc/gai.conf が使用されていなかったようです。ただし、gai.conf はほとんど空なので (多くのコメントを除いて)、問題になるとは思いません。実際にファイルを削除しても、(/etc/hosts に従って) 両方の IP を正しく解決できます。動的にリンクされたプログラム。
一方、この場合、静的リンクとは、リンク時に構成ファイルでさえ評価されることを意味しますか??
質問: 両方のプログラムの出力が異なるのはなぜですか?
test.c :
#include <netdb.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
struct addrinfo *result, *rp;
int s = getaddrinfo("localhost", "", NULL, &result);
char host[INET6_ADDRSTRLEN];
for (rp = result; rp != NULL ; rp = rp->ai_next) {
inet_ntop(rp->ai_family,
(rp->ai_family == AF_INET ?
&(((struct sockaddr_in*)rp->ai_addr)->sin_addr):
&(((struct sockaddr_in6*)rp->ai_addr)->sin6_addr)),
host, sizeof host);
printf("%s %d\n", host, rp->ai_family);
}
}