getaddrinfo() 返回错误"The requested name is valid, but no data of the requested type was found."

getaddrinfo() returns error "The requested name is valid, but no data of the requested type was found."

本文关键字:requested data no but found of type the was is 返回      更新时间:2023-10-16

我在我的示例程序中使用 getaddrinfo 将主机名转换为地址。但它失败并出现此错误"请求的名称有效,但未找到请求类型的数据。

示例代码:

struct addrinfo hints, *save_res= 0, *res= 0;
int gai_rc;
char host[] = "localhost";
char port[] = "3333";
/* set hints for getaddrinfo */
ZeroMemory( &hints, sizeof(hints) );
hints.ai_protocol= IPPROTO_TCP; /* TCP connections only */
hints.ai_family= AF_UNSPEC;     /* includes: IPv4, IPv6 or hostname */
hints.ai_socktype= SOCK_STREAM;
/* Get the address information for the server using getaddrinfo() */
gai_rc= getaddrinfo(host, port, &hints, &res);
if (gai_rc != 0)
{
    printf("getaddrinfo failed with error: %d - %sn", gai_rc, gai_strerrorA(gai_rc));
    return false;
}
printf("success");

从 MSDN 文档:WSANO_DATA11004名称有效,没有请求类型的数据记录。请求的名称有效,并且在数据库中找到,但它没有解析正确的关联数据。通常的例子是主机名到地址的转换尝试(使用gethostbyname或WSAAsyncGetHostByName(,它使用DNS(域名服务器(。返回 MX 记录,但不返回 A 记录 - 指示主机本身存在,但无法直接访问。

有人可以建议为什么它为locahost提供此错误。我无法弄清楚这里的问题是什么。

我遇到了同样的问题,请尝试删除:

hints.ai_protocol= IPPROTO_TCP; 

它不会影响预期的结果,因为:

hints.ai_socktype= SOCK_STREAM;

告诉它只选择 TCP 连接。也许你也可以只使用第一个,但我没有检查它。