POSIXgetaddrinfo()函数用于执行DNS解析以及服务名称解析。hints传递给的参数有getaddrinfo()一个标志字段,ai_flags。
可能的标志值包括AI_NUMERICHOST。根据文档,这表明getaddrinfo()主机名字符串是 IP 地址。由于主机名已经是 IP 地址(而不是主机名),因此不需要 DNS 解析。
我无法理解该标志的目的或用例。如果您已经有了 IP 地址,为什么还需要打电话呢getaddrinfo()?我能看到的唯一可能的目的是您已经拥有 IP 地址,但只想获取服务名称的情况。不过这样的话,getservbyname()直接调用就可以了,这样就简单多了。
我唯一能想到的是它getaddrinfo()是可重入的,而显然getservbyname()不是可重入的。那么该标志的全部目的AI_NUMERICHOST只是为了提供一种实现线程安全的迂回方式吗getservbyname()?
如果不是的话,这样做的目的是什么AI_NUMERICHOST?
getaddrinfowith的主要用途AI_NUMERICHOST是作为inet_aton和 的与 IPv4/IPv6 无关的替代品inet_pton。也就是说,它获取文本 IPv4和IPv6 地址并将它们转换为sockaddr对象;调用代码不必知道哪个是哪个。
您确实可以将其用作线程安全的getservbyname,但我不记得上次看到不使用的代码是什么时候AI_NUMERICSERV,所以我认为这不是重要的属性。