套接字主机名查找超时:如何实现?

维塔利

我编写了使用套接字的可移植Windows / Linux应用程序。我使用gethostbyname函数来执行DNS查找。但是,我看不到如何设置gethostbyname超时并保护我的应用程序免于在名称查找过程中挂起。当然可以跑gethostbyname在另一个线程上,那是我的工作。但是,它仅是微不足道的应用程序的解决方案。我的应用程序并行使用1000-3000个连接。在这种情况下,问题是:如何处理超时的线程?我没有找到好的解决方案。我们可以“忘记”它们,但是,在不良网络上,我们的程序线程数将增长到无限,这是我们的危险。我们可以终止它们,但是这个想法看起来很糟糕。根据我的经验,Windows可能在数千个线程终止后崩溃,而且我不知道Linux在这种情况下的行为。另外,线程创建需要很多资源。创建3000个线程只是为了运行不是一个好主意gethostbyname功能并退出。因此,对于真正复杂的应用程序来说,单独的线程似乎不是一个好主意。当然,另一种选择是编写自己的DNS客户端,但是看起来也不好。Windows和Linux上是否有任何“官方”方式(或更好的可移植方式)以自定义超时获取主机地址?

首先:不要使用gethostbyname(),这已经过时了。使用getaddrinfo()代替。

您想要的是异步名称解析。这是一个普遍的要求,但不幸的是,没有“标准”的方式,即如何做到这一点。以下是我为您找到最佳解决方案的提示:

  1. 不要实现DNS客户端。名称解析不仅仅是DNS。考虑一下mDNS,托管文件等。使用类似getaddrinfo()这样的系统函数可以为您抽象出不同的名称解析机制。

  2. 某些系统提供解析功能的异步版本,例如glibc提供getaddrinfo_a()

  3. 有异步解决方案库,它们包装了同步系统解析器功能。首先,我想到了libasyncns

  4. Boost.Asio支持将解析器与线程池一起使用。这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Qt获取主机名?

来自分类Dev

主机的主机名

来自分类Dev

如何从IP(Linux)获取主机名?

来自分类Dev

主机名查找时间很慢

来自分类Dev

转到:套接字库获取主机名

来自分类Dev

确定异步套接字服务器中客户端的主机名

来自分类Dev

如何通过Sanic获取主机名?

来自分类Dev

如何查找X服务器的主机名

来自分类Dev

Python套接字未发送主机名

来自分类Dev

如何更改主机名?

来自分类Dev

如何更改主机名

来自分类Dev

如何更改主机名

来自分类Dev

查找用于连接到我的套接字服务器的主机名

来自分类Dev

主机的主机名

来自分类Dev

套接字主机名查找超时:如何实现?

来自分类Dev

主机名查找时间很慢

来自分类Dev

如何匹配主机名机器

来自分类Dev

从虚拟机内部查找主机的主机名?

来自分类Dev

SSH连接到UNIX套接字而不是主机名

来自分类Dev

如何查找从外部看到的主机名/ IP地址?

来自分类Dev

在没有HttpsUrlConnection的情况下忽略Android SSL套接字中的主机名验证

来自分类Dev

如何更改我的主机名?

来自分类Dev

如何从IP成功查找主机名,反之亦然?

来自分类Dev

iptables如何处理主机名?

来自分类Dev

如何使Wordpress独立于主机名

来自分类Dev

如何更新主机名

来自分类Dev

查找Windows映像的主机名

来自分类Dev

如何从Android设备获取主机名

来自分类Dev

Perl 套接字中的未知主机名