在我的代码中,我使用了如下代码。
do
{
r = getaddrinfo(host, service, &hints, ret);
}
while (r == EAI_AGAIN);当测试getaddrinfo()连续失败时,循环不能正确终止。
你认为有什么方法可以改进代码吗?我们可以使用计数器来计算它应该循环的次数吗?
另外,请告诉我getaddrinfo()调用返回"EAI_AGAIN“的原因是什么。
发布于 2017-11-29 08:38:09
无可否认,这是一个大胆的猜测。
我们在一个性能稍弱的单核嵌入式系统上也看到了这一点。
我假设(在我们的例子中)dnsmasq是在一个单独的进程中运行的,并且由于某种原因(可能是因为我们在绕圈子追逐我们的尾巴),它没有获得足够的资源(cpu/ram/...)做好本职工作。
对解决方案的大胆猜测可能是将睡眠放在这个紧凑的循环中,让DNS缓存魔术般地处理它所需的资源来完成它的工作。
如果有效的话,我会告诉你的。
https://stackoverflow.com/questions/9379373
复制相似问题