关于套接字编程中getaddrinfo()函数的问题

时间:2011-02-14 14:30:18

标签: sockets networking network-programming

以下是调用getaddrinfo()

的示例
status = getaddrinfo("www.example.net","1234", &hints, &server_info);

之后,server_info将指向包含各种地址信息的链接列表。

我有以下问题:

由于我已经明确指定了主机名和端口号,因此我能想到的唯一地址信息是IPv4和IPv6地址。因此,链表的长度应为2.除了它们之外还有其他类型的地址信息吗?

感谢。

2 个答案:

答案 0 :(得分:4)

该名称可以解析为多个IPv4或IPv6地址,没有什么可说的,例如只返回一个 IPv4地址(尝试使用“www.google.com”)例如,您可能会获得多个IPv4地址。)

但无论如何,我认为你问题的基本前提是错误的。即使没有可能返回多个IPv4和一个IPv6地址今天,该函数也会被记录为返回addrinfo个对象的任意长链表。因此,即使您的代码在今天的每种情况下都能正常工作,也无法保证它明天会继续工作。如果记录该函数以返回任意长的链表,那么您需要能够处理它。

答案 1 :(得分:0)

您希望断开具有名称的计算机的物理配置。 DNS仅将名称映射到一组地址。很多主机只有一个接口。许多主机将具有多个(称为多归属)。 DNS并不关心它映射名称的地址对机器或机器的配置是什么。作为简单的示例,服务器通常会在具有不同地址的多个网络上具有接口,这些接口都将映射到相同的名称。有时,将来自不同计算机的服务折叠到一个不同的名称时,将映射到同一地址。因此,不要假设名称和机器之间的任何类型的1:1映射,更少的接口。