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

维塔利

我编写了使用套接字的可移植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

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

来自分类Dev

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

来自分类Dev

Python套接字未发送主机名

来自分类Dev

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

来自分类Dev

Perl 套接字中的未知主机名

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何更改主机名?

来自分类Dev

如何更改主机名

来自分类Dev

如何更改主机名

来自分类Dev

主机名查找时间很慢

来自分类Dev

主机名查找时间很慢

来自分类Dev

查找Windows映像的主机名

来自分类Dev

主机的主机名

来自分类Dev

主机的主机名

来自分类Dev

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

来自分类Dev

如何使用Qt获取主机名?

来自分类Dev

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

来自分类Dev

如何通过Sanic获取主机名?

来自分类Dev

如何匹配主机名机器

来自分类Dev

如何更改我的主机名?

来自分类Dev

iptables如何处理主机名?

来自分类Dev

如何使Wordpress独立于主机名

来自分类Dev

如何更新主机名

来自分类Dev

如何从Android设备获取主机名