我打电话getaddrinfo()如下:
addrinfo hints;
addrinfo* res = NULL;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, "http", &hints, &res);
Run Code Online (Sandbox Code Playgroud)
目前结果是否可能包含多个带有IPv4地址的结果?我能想到的唯一原因可能是具有单独连接的多个设备,但我一半期望它只返回主连接的地址或它恰好使用的一个连接.
是.
关于getaddrinfo的手册页有关于该主题的说明
链表可能具有多个addrinfo结构的原因有多种,包括:网络主机是多宿主的,可通过多种协议访问(例如AF_INET和AF_INET6); 或者多个套接字类型可以使用相同的服务(例如,一个SOCK_STREAM地址和另一个SOCK_DGRAM地址).通常,应用程序应尝试按返回顺序使用地址.getaddrinfo()中使用的排序函数在RFC 3484中定义; 通过编辑/etc/gai.conf(从glibc 2.5开始可用),可以为特定系统调整顺序.