繁体   English   中英

addinfo结构中ai_next和ai_addr的目的

[英]The purpose of ai_next and ai_addr inside the addrinfo struct

我正在自学套接字编程,我最近遇到了getaddrinfoaddrinfo结构。 从我的理解,多数在结构中的文件,你可以通过指定的宏,例如,如果我想使用整数AF_INET在我addrinfo结构,我想请指定AF_INET ,或整数2(我不知道这一点,它声明了什么头文件?)。 好吧,我不认为我完全理解为什么有一个sockaddr和指向另一个addrinfo的指针。 我被告知后者会创建一个链表,但它背后的目的是什么?

我建议始终使用类型名称指定值。 它们在不同系统上可能不同。

getaddrinfo(3)手册页描述了addrinfo结构的字段,但是为了总结链表的工作方式,请考虑以下代码:

for (struct addrinfo *ai = ...; ai != NULL; ai = ai->ai_next) {
  printf("address: %s -> %s\n", ai->ai_canonname,
         inet_ntop(ai->ai_family, ai->ai_addr, buf, buflen));
}

你从getaddrinfo回来的addrinfo*可能指向另一个,可能指向另一个,依此类推。 这就是它如何表示可以解析为多个不同IP的地址(用于负载平衡,双栈IPv4 / IPv6等)。

好的,主要的问题是 - “它背后的原因是什么?”。 原因是,一个主机可以分配多个互联网地址。 例如,如果您运行“主机www.google.com”命令,这将为您提供多个互联网地址,因此多个addrinfo链接列表的重点是保留所有返回的互联网地址,从而允许您正确翻译网络地址和服务。

当您编写应用程序并尝试连接到可能具有多个Internet地址的公共服务器时,这些链接的地址列表将使您可以灵活地连接到适当的接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM