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
,在以“如果指定了标志...”开头的段落中。
您引用的联机帮助页中也清楚地说明了所有内容。