在什么情况下getnameinfo()会返回EAI_AGAIN?

时间:2017-02-04 14:38:45

标签: c linux dns glibc

在Glibc / Linux上,导致getnameinfo返回EAI_AGAIN的原因是什么?

阅读source似乎EAI_AGAIN只有在内部函数__gethostbyaddr_r也返回错误代码TRY_AGAIN时才会发生。但是,我无法找到该函数的定义,因此很难知道是什么原因造成的。

在我的测试中,我发现除非在NI_NAMEREQD调用上设置getnameinfo标志,否则不会发生错误,并且一旦设置了该标志,我只能导致返回码{{ 1}}(-2)。

此错误EAI_NONAME在以下情况下发生:

  1. 可以访问DNS服务器,但未找到IP名称。
  2. DNS服务器可以访问,但是呼叫超时(通过创建在回答查询时挂起的虚假DNS服务器进行测试)。
  3. /etc/resolv.conf中定义的DNS服务器无法连接。
  4. DNS服务器立即返回EAI_NONAME响应代码。
  5. 我预计其中一个条件会触发SERVFAIL响应,但没有运气。

    我问这个是为了在这种情况发生时测试一个程序的行为,还有我们的好奇心,看到它偶尔发生在野外"但是一直无法重现它

    测试环境是Linux 4.8.0,Glibc 2.24。

0 个答案:

没有答案