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什么?
的主要用途getaddrinfo有AI_NUMERICHOST是是IPv4 / IPv6的不可知替代inet_aton和inet_pton。也就是说,它将文本IPv4 和 IPv6地址转换为sockaddr对象。调用代码不必知道哪个是哪个。
确实可以将其用作线程安全的getservbyname,但是我不记得上一次看到未使用的代码AI_NUMERICSERV,所以我认为这不是重要的属性。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。