getaddrinfo(),我可以指定一个没有主机的服务,这是什么意思?

getaddrinfo(),我可以指定一个没有主机的服务,这是什么意思?

man getaddrinfo:

 int getaddrinfo(const char *node, const char *service,
                       const struct addrinfo *hints,
                       struct addrinfo **res);

节点或服务中的一个(但不能同时)可以为 NULL。

仅指定node是可以理解的,然后它为您提供与一台特定主机相关的所有可用服务。但是如果只指定 aservice而不指定 a 是什么意思呢node/host?扫描网络中的所有主机?

答案1

仅指定节点是可以理解的,然后它为您提供与一台特定主机相关的所有可用服务。

绝对不。如果服务是NULL,返回的addrinfo结构将把端口/服务设置为0,它将不是返回主机上可用的每个服务的结构。

但如果只指定一个服务而不指定节点/主机,这意味着什么呢?

如果AI_PASSIVE中未指定.ai_flags,则返回循环设备的地址(127.0.0.1对于 ipv4、::1对于 ipv6)。

如果AI_PASSIVE指定,它将返回“通配符”地址(0.0.0.0对于 ipv4,::对于 ipv6)。

您可以阅读全文标准AI_PASSIVE,在以“如果指定了标志...”开头的段落中。

您引用的联机帮助页中也清楚地说明了所有内容。

相关内容