我在我的示例程序中使用getaddrinfo将主机名转换为address.But它失败并出现此错误“请求的名称有效,但未找到所请求类型的数据。”。
示例代码:
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 - %s\n", gai_rc, gai_strerrorA(gai_rc));
return false;
}
printf("success");
来自MSDN文档: WSANO_DATA 11004 有效名称,没有请求类型的数据记录。 请求的名称有效且在数据库中找到,但没有正确的关联数据被解析。通常的示例是使用DNS(域名服务器)的主机名到地址转换尝试(使用gethostbyname或WSAAsyncGetHostByName)。返回MX记录,但没有A记录 - 表示主机本身存在,但不能直接访问。
有人可以建议为什么它会给locahost这个错误。我无法弄清楚这里有什么问题..
答案 0 :(得分:0)
我遇到了同样的问题,请尝试删除:
hints.ai_protocol= IPPROTO_TCP;
它不会影响所需的结果,因为:
hints.ai_socktype= SOCK_STREAM;
告诉它只选择tcp连接。 也许你也可以只使用第一个,但我没有检查过它。