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