假设我调用 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);
当前是否有可能在结果中包含多个具有 IPv4 地址的结果?我能想到的唯一原因可能是多个设备具有单独的连接,但我有一半希望它只返回主要连接的地址或它恰好使用的一个连接。
最佳答案
是的。
man page on getaddrinfo关于这个话题有以下要说的
链表可能有多个 addrinfo 结构的原因有多种,包括:网络主机是多宿主的,可通过多种协议(protocol)访问(例如 AF_INET 和 AF_INET6);或者同一服务可从多种套接字类型(例如,一个 SOCK_STREAM 地址和另一个 SOCK_DGRAM 地址)获得。通常,应用程序应该尝试按照地址返回的顺序使用这些地址。 getaddrinfo() 中使用的排序函数在 RFC 3484 中定义;可以通过编辑/etc/gai.conf(自 glibc 2.5 起可用)为特定系统调整顺序。
关于c++ - 主机上的 getaddrinfo() 会返回多个 IPv4 地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11524044/