getaddrinfo() 连续失败并出现 EAI_AGAIN

Posted

技术标签:

【中文标题】getaddrinfo() 连续失败并出现 EAI_AGAIN【英文标题】:getaddrinfo() fails continuously with EAI_AGAIN 【发布时间】:2012-02-21 14:35:38 【问题描述】:

在我的代码中,我使用的代码如下。

do

    r = getaddrinfo(host, service, &hints, ret);

while (r == EAI_AGAIN);

当测试 getaddrinfo() 连续失败,因此循环没有正确终止。

您有什么方法可以改进代码吗?我们可以使用计数器来计算它应该循环的次数吗?

另外请告诉我 getaddrinfo() 调用返回“EAI_AGAIN”的所有原因。

【问题讨论】:

错误表示:名称解析出现临时故障。我们不可能知道为什么会发生这种情况。我们对您传递的参数一无所知。在繁忙的循环中调用它不太可能产生结果。 这很可能意味着某些 DNS 服务器无法访问/关闭或您的 DNS 配置错误。 【参考方案1】:

诚然,这是一个疯狂的猜测。

我们也在一个功率稍显不足的单核嵌入式系统上看到了这一点。

我假设(在我们的例子中是 dnsmasq)在一个单独的进程中运行,并且无论出于何种原因(可能是因为我们在追逐我们的尾巴的圈子里跑来跑去)它没有获得足够的资源(cpu/ram/.. .) 完成它的工作。

对解决方案的一个大胆猜测可能是让这个紧密的循环进入休眠状态,让 DNS 缓存在它需要的资源上发挥作用。

我会告诉你它是否有效。

【讨论】:

以上是关于getaddrinfo() 连续失败并出现 EAI_AGAIN的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 的云功能 - getaddrinfo EAI_GAIN site.com:443 [重复]

libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)

bug: Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address asso

iPhone中的getaddrinfo

节点服务器上的间歇性 EAI_AGAIN 错误

Node.js http.request 失败并显示 [错误:getaddrinfo EADDRINFO]