首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getaddrinfo:数据库查找过程中发生的不可恢复错误。

getaddrinfo:数据库查找过程中发生的不可恢复错误。
EN

Stack Overflow用户
提问于 2015-08-24 19:20:29
回答 1查看 3.6K关注 0票数 0

在运行以下C程序时,我从Windows10上的getaddrinfo()中得到了这个奇怪的错误:

https://gist.github.com/anonymous/4406cb031791afba29e5

下面是调用getaddrinfo()的代码的相关部分

代码语言:javascript
复制
  int error;
  socket_t sock;
  struct sockaddr_in addr;
  struct addrinfo ai_hints, *ai_result, *ai_cur;
  #ifdef _WIN32
    int wsa_error;
    WSADATA wsa_data;
  #endif

  if (argc < 3) {
    fprintf(stderr, "Usage: %s <host> <port>\n", argv[0]);
    return 1;
  }

  #ifdef _WIN32
    wsa_error = WSAStartup(MAKEWORD(2, 2), &wsa_data);
    if (wsa_error != 0) {
      fprintf(stderr, "WSAStartup: %s\n",
          get_error_string(wsa_error, NULL, 0));
      return 2;
    }
  #endif

  puts("Hello, World!");

  sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if (sock == -1) {
    fprintf(stderr, "socket: %s\n",
        get_error_string(get_socket_error(), NULL, 0));
    return 3;
  }

  memset(&ai_hints, sizeof(ai_hints), 0);
  ai_hints.ai_family = AF_UNSPEC;
  ai_hints.ai_protocol = IPPROTO_TCP;
  ai_hints.ai_socktype = SOCK_STREAM;

  error = getaddrinfo(argv[1], argv[2], &ai_hints, &ai_result);
  if (error != 0) {
    fprintf(stderr, "getaddrinfo: %s\n", error);
    close(sock);
    return 4;
  }

每当程序运行它时,无论我通过命令行传递哪个主机名和端口,它都会输出以下内容:

代码语言:javascript
复制
Hello, World!
getaddrinfo: A non-recoverable error occurred during a database lookup.

我还编写了相应的服务器程序,它运行得很好(通过telnet!)。

你能看出我的密码有什么问题吗?

编辑:

它在Linux上似乎运行得很好,getaddrinfo()没有给出任何错误,而且客户机能够连接到我的服务器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 06:26:13

万岁!我找到了!

原来,在初始化memset()时,我混淆了ai_hints中参数的顺序,而不是:

代码语言:javascript
复制
  memset(&ai_hints, sizeof(ai_hints), 0);

它应该是:

代码语言:javascript
复制
  memset(&ai_hints, 0, sizeof(ai_hints));

遗憾的是,我没有完全阅读getaddrinfo()文档,它准确地描述了这个错误条件:

pHints in,可选 指向addrinfo结构的指针,该结构提供有关调用方支持的套接字类型的提示。 由addrinfo参数指向的addrinfo结构的ai_addrlen、ai_canonname、ai_addr和ai_next成员必须为零或空。,否则GetAddrInfoEx函数将在 WSANO中失败。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32190073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档