带有标志AI_NUMERICHOST的getaddrinfo

问题描述

请告诉我一些我听不懂的内容。有一个功能getaddrinfo()一个标志AI_NUMERICHOST。 MSDN说,在带有该标志的getaddrinfo()中,您需要发送IP地址的数字值,而不是域名。但是为什么呢?

我已经有一个IP地址,为什么我要问DNS一个IP地址?

解决方法

getaddrinfo()输出所请求的主机/服务的sockaddr_...结构(sockaddr_insockaddr_in6)。不仅取决于IP地址,还取决于其他内容,例如套接字类型,服务端口等,具体取决于您的输入和hint值。

因此,如果您已经具有字符串格式的IP地址,则可以让getaddrinfo()为您解析该字符串(指定AI_NUMERICHOST以避免DNS)为在输出sockaddr_...二进制格式,以及同时填写其他sockaddr_...字段。