问题标签 [getaddrinfo-a]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9238 浏览

c - 如何使用 getaddrinfo_a 与 glibc 进行异步解析

一个经常被忽视的函数,它不需要外部库,但基本上没有任何文档。

0 投票
1 回答
6710 浏览

c++ - getaddrinfo 响应缓慢

我正在使用 getaddrinfo 从 Windows 上的 C++ 进行 DNS 查询。我曾经使用 Windows API DnsQuery 并且效果很好,但是在向我的软件添加 IPv6 支持时,我切换到了 getaddrinfo。从那时起,我看到了以下内容:

我的问题是有时 getaddrinfo 需要很长时间才能完成。getaddrinfo 的典型响应只需要几毫秒,但在 10000 次中大约有 1 次需要更长的时间,在某些情况下大约需要 15 秒,但有几种情况需要几分钟。

我在服务器上运行了 Wireshark 并分析了我的应用程序调试日志并看到以下内容:

  • 我调用函数getaddrinfo。
  • 15 秒后,我的机器查询 DNS 服务器。
  • 几毫秒后,我收到了来自 DNS 服务器的响应。

这里奇怪的是,实际的 DNS 查询只需要十分之一秒,但 getaddrinfo 实际执行的时间要长得多。

许多用户都报告了这个问题,所以这不是我的机器特有的问题。

那么 getaddrinfo 除了联系 DNS 服务器还能做什么呢?

编辑:

  • 有几个地址出现了问题。如果我尝试使用这些地址重现问题,则不会出现问题。
  • 我做了一些愚蠢的事情。在每次 DNS 查询时,都会解析 etc/services。但是,这并不能解释几分钟的延迟。(感谢 D.Shawley)

编辑 2

  • 我的软件进行的一种 DNS 查询是反垃圾邮件 DNSBL 查询。一位用户的日志显示,查找 ip.address1.example.com 似乎总是需要 2039 秒,而查找 another.ip.address.example.com 总是需要 1324 秒。在那之后的第二天,这些地址的查找就很好了。起初我认为 DNS BL 作者在他们这边设置了某种超时。但如果这是核心问题,getaddrinfo 应该早点超时吧?
0 投票
3 回答
2525 浏览

c - 多个 valgrind 错误:条件跳转或移动取决于未初始化的值

我正在运行 Valgrind,但出现以下错误(这不是唯一的错误):

我的tunnelURL()函数如下所示(C 代码):

第 336 行对应于带有函数调用的if语句。getaddrinfo()我不确定我没有初始化什么。我传入的字符串“应该”已经设置好了。我打印出来就好了。我还收到与同一行代码相对应的另一个错误:

关于可能是什么原因的任何想法?

0 投票
2 回答
551 浏览

objective-c - 在 getaddrinfo 期间用户数量非常少的 BAD_ACCESS

好吧,我在这里完全不知所措。一小部分用户似乎在我的主机名翻译中有 BAD_ACCESS 错误。

下面的完整崩溃:

这是我用来解析 dns(重要部分)的代码。我在这里错过了什么吗?我可以添加更多支票吗?这只是一个非常少的用户数量,所以成千上万的用户没有问题。

我的主机名解析代码的一部分:我的 [CFNetworkStream openBSDSocket::] 方法

依次调用 [self getHostAddress:xxxx] 方法下面的完整方法:

能给我咨询一下吗?我似乎真的被困在这里,那些(低)数量的用户会在这段代码中看到问题吗?我需要额外的检查吗?

我真的可以使用你的提示/咨询。

重要提示:受影响的用户表示只有在网络中断时才会发生这种情况。但是我不能接受断开的网络连接会造成上述问题?

编辑:我做了泄漏测试;很长一段时间没有伪造 DNS 结果(如果(retval != 0)),但我的 Mac 上没有内存泄漏。

0 投票
1 回答
2624 浏览

linux - 函数 getaddrinfo 的问题

我使用函数getaddrinfo获取域名的ip地址,OS=linux,语言=c++。我注意到,当拔下以太网电缆时,该函数会阻塞线程 30 秒(函数不会在 30 秒内返回)。对我来说时间太长了。是否可以为该函数设置超时或中断函数的执行或任何其他想法?

谢谢 EB

0 投票
4 回答
2391 浏览

winapi - WINAPI中是否有非阻塞的主机解析方法?

getaddrinfo()用于阻塞主机解析,但有非阻塞方法吗?

0 投票
1 回答
181 浏览

c++ - gai_cancel() 需要很长时间才能成功

我正在尝试在 C++ 中异步查找域。原因是我希望能够有效地添加超时时间,以防系统无法查找域。我遇到了 getaddrinfo_a() 命令,所以我决定试一试。但是,在我的机器上取消任何不会成功的 dns 查找(例如没有互联网连接时)永远不会少于 20 秒。这是一个简单的例子:

像这样编译:

然后在没有互联网连接的情况下在基于 linux 的系统上运行命令,如下所示:

你会发现程序总是需要大约 20 秒才能关闭。任何帮助将不胜感激!