getaddrinfo()连续失败并使用EAI_AGAIN

时间:2012-02-21 14:35:39

标签: c++ network-programming getaddrinfo

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

do
{
    r = getaddrinfo(host, service, &hints, ret);
}
while (r == EAI_AGAIN);

当测试getaddrinfo()持续失败时,循环不能正常终止。

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

另请告诉我getaddrinfo()调用返回“EAI_AGAIN”的原因是什么。

1 个答案:

答案 0 :(得分:0)

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

我们也在一个功能稍弱的单核嵌入式系统上看到了这一点。

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

对解决方案的一种疯狂猜测可能是将睡眠置于紧密的循环中,让DNS缓存魔法所需的资源来完成它的工作。

如果有效,我会通知你。