我想了解getaddrinfo函數返回的內容:的getaddrinfo和IPv6
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netdb.h>
int main (int argc, char *argv[])
{
struct addrinfo *res = 0 ;
getaddrinfo("localhost", NULL ,NULL,&res);
printf("ai_flags -> %i\n", res->ai_flags) ;
printf("ai_family -> %i\n", res->ai_family) ;
printf("ai_socktype -> %i\n", res->ai_socktype) ;
printf("ai_protocol -> %i\n", res->ai_protocol) ;
printf("ai_addrlen -> %i\n", res->ai_addrlen) ;
struct sockaddr_in* saddr = (struct sockaddr_in*)res->ai_addr;
printf("ai_addr hostname -> %s\n", inet_ntoa(saddr->sin_addr));
freeaddrinfo(res);
return 0 ;
}
結果:
ai_flags -> 40
ai_family -> 2
ai_socktype -> 1
ai_protocol -> 6
ai_addrlen -> 16
ai_addr hostname -> 127.0.0.1
在/ etc/hosts中,我已經有了:
127.0.0.1 localhost
::1 localhost
Getaddrinfo只返回127.0.0.1而不是:: 1?我不明白爲什麼?
第二個問題是我在哪裏可以找到這些整數(40,2,1,6等)的含義?我讀過這個人,但沒有任何關於這個的。
我也想知道是否有可能提供IPv6地址(例如:: 1),並且函數返回名稱:localhost?
非常感謝!
根據手冊頁,getaddrinfo分配空間並填充從&res開始的鏈接列表。我認爲它會返回多個條目,並且需要通過res-> ainext – roirodriguez 2011-05-10 21:21:06