开发者社区> 问答> 正文

带有AI_NUMERICHOST的getaddrinfo

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

在可能的标志值中是AI_NUMERICHOST。根据文档,这getaddrinfo()表明主机名字符串是IP地址。由于主机名已经是IP地址(而不是主机名),因此不需要DNS解析。

我在理解此标志的目的或用例时遇到麻烦。如果您已经有了IP地址,为什么还要打电话getaddrinfo()呢?我可能看到的唯一可能的目的是,您已经拥有IP地址,但只想获取服务名称。但是在那种情况下,您可以直接拨打电话getservbyname(),这会简单得多。

我唯一想到的是getaddrinfo()可重入,而显然getservbyname()不是可重入。那么,AI_NUMERICHOST标志的全部目的是否只是为了提供一种实现线程安全的绕行方式getservbyname()?

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

展开
收起
祖安文状元 2020-01-05 18:57:22 1761 0
1 条回答
写回答
取消 提交回答
  • 的主要用途getaddrinfo有AI_NUMERICHOST是是IPv4 / IPv6的不可知替代inet_aton和inet_pton。也就是说,它将文本IPv4 和 IPv6地址转换为sockaddr对象。调用代码不必知道哪个是哪个。

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

    2020-01-05 18:57:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
USING AI FOR PROVIDNG INSIGHTS 立即下载
AI Made Easy with Flink + AI Flow_compressed 立即下载
AI赋能的语音交互解决方案 Link Voice 立即下载