c++ - 主机上的 getaddrinfo() 会返回多个 IPv4 地址吗?

标签 c++ sockets

假设我调用 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/

相关文章:

python - 通过套接字发送字符串(python)

PHP 套接字 GET 请求

c - 使用 C 语言通过套接字编程负载均衡器

c++ - 如何将正错误代码从 ATL 返回到 VB6?

c++ - boost::thread 在终止时会自动从 boost::thread_group 中删除吗?

C++使用类从多维 vector 输出一个char数组

c - 尝试在c中将结构的一部分从tcp服务器发送到客户端

c++ - Mac 与 Windows:Eigen::Vector3f(0,0,0).normalized()

c++ - 我正在尝试使用队列实现 bfs。有人可以帮我找到错误吗?

ios - GCDAsyncSocket 接收数据时卡住 UI