【发布时间】:2019-08-11 19:43:07
【问题描述】:
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的目的是什么?
【问题讨论】: