[QWorker] 使用QWorker的延迟功能快速断掉一个无效的TCP连接

TCP 协议经历了漫长的时间发展到现在,其连接到一个地址时,如果对方地址不存在而且没有 ICMP 协议返回目标不可达消息时,连接就会漫长的等待重试失败。这显然在网络带宽比 TCP 协议产生时高出不知道 N 倍的今天,是一个没有意义的等待,而当我们想要控制这个连接时间,我们会发现我们竟然无从下手(至少我不知道,也许你知道)。

那么,本文尝试利用 QWorker 的延迟作业功能来断开连接(socket 函数是线程安全的)。

首先,我们作业的唯一内容就是关闭这个连接对应的句柄:

然后,我们在调用 connect 连接到远程之前,Delay 一下这个作业,这里延迟1秒,也就是说1秒后还连不上,就取消这个连接:

OK,使用 QWorker 处理这个问题就这么简单。用 QWorker ,就这么自信!(海飞丝呢?找作者要版权费)

好了,我们来一个不依赖QWorker的标准的实现吧,直接调用ConnectTo(目标IP,目标端口,超时时间)就要以了:

分享到: