POSIX getaddrinfo()
函数用于执行 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
将成为 inet_aton
的 IPv4/IPv6 不可知替代品和 inet_pton
.也就是说,它采用文本 IPv4 和 IPv6 地址并将它们转换为 sockaddr
对象;调用代码不必知道哪个是哪个。
您也可以将其用作线程安全的 getservbyname
,但我不记得上次看到没有使用 AI_NUMERICSERV
的代码是什么时候了。 ,所以我认为这不是重要的属性。
关于c - 使用 AI_NUMERICHOST 获取地址信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55272192/