使用 AI_NUMERICHOST 获取地址信息

getaddrinfo with AI_NUMERICHOST

POSIXgetaddrinfo()函数用于执行DNS解析,以及服务名称解析。传递给 getaddrinfo()hints 参数有一个标志字段,ai_flags

可能的标志值是 AI_NUMERICHOST。根据 the documentation,这会通知 getaddrinfo() 主机名字符串是一个 IP 地址。由于主机名已经是一个 IP 地址(而不是主机名),因此不需要 DNS 解析。

我无法理解此标志的用途或用例。如果您已经有了 IP 地址,为什么还要调用 getaddrinfo()?我能看到的唯一可能的目的是您已经拥有 IP 地址,但只想获取服务名称。但那样的话,你可以直接调用getservbyname(),这样会简单得多。

我唯一能想到的是 getaddrinfo() 是可重入的,而显然 getservbyname() 不是可重入的。那么 AI_NUMERICHOST 标志的全部目的仅仅是提供一种执行线程安全 getservbyname() 的迂回方式吗?

如果不是,AI_NUMERICHOST的目的是什么?

getaddrinfoAI_NUMERICHOST 的主要用途是 IPv4/IPv6-agnostic 替代 inet_atoninet_pton。也就是说,它采用文本 IPv4 IPv6 地址并将它们转换为 sockaddr 对象;调用代码不必知道哪个是哪个。

确实可以将其用作线程安全 getservbyname,但我不记得上次看到 没有 的代码是什么时候了使用 AI_NUMERICSERV,所以我认为这不是重要的 属性。