使用 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
的目的是什么?
getaddrinfo
与 AI_NUMERICHOST
的主要用途是 IPv4/IPv6-agnostic 替代 inet_aton
和 inet_pton
。也就是说,它采用文本 IPv4 和 IPv6 地址并将它们转换为 sockaddr
对象;调用代码不必知道哪个是哪个。
确实可以将其用作线程安全 getservbyname
,但我不记得上次看到 没有 的代码是什么时候了使用 AI_NUMERICSERV
,所以我认为这不是重要的 属性。
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
的目的是什么?
getaddrinfo
与 AI_NUMERICHOST
的主要用途是 IPv4/IPv6-agnostic 替代 inet_aton
和 inet_pton
。也就是说,它采用文本 IPv4 和 IPv6 地址并将它们转换为 sockaddr
对象;调用代码不必知道哪个是哪个。
确实可以将其用作线程安全 getservbyname
,但我不记得上次看到 没有 的代码是什么时候了使用 AI_NUMERICSERV
,所以我认为这不是重要的 属性。