我目前正在尝试编写自己的 HTTP 代理。我的代码可以正常工作,但我尝试使用 ApacheBench 对其进行压力测试,发现时不时地收到如下消息:
“getaddrinfo:提供了节点名或服务名,或者不知道主机 en.wikipedia.org 服务 80”
我不明白为什么这个函数调用会在传递主机名和端口的地方失败。
我在网上查找了解决此问题的不同方法,但没有找到任何有用的方法。
有没有人有什么想法?
编辑 通过在我的应用程序中实现 DNS 缓存系统解决了这个问题。
最佳答案
也许您的解析堆栈中的某些内容无法承受您进行的查询量?
您必须从 /etc/nsswitch.conf
开始,然后查看查询是如何在您的系统上解决的。在某些时候,您最终会访问本地 DNS 缓存,如果它同时有太多查询,它也可能会超时。
您可能会发现您需要在您的代理中运行 DNS 缓存(例如 Squid)或在本地使用 lwresd。
关于c++ - getaddrinfo 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7706090/