重复TCP连接的要求

时间:2012-03-05 20:47:53

标签: tcp winsock

我正在使用Winsock,我需要重复向第三方服务器发出TCP连接。这些应用程序可能会在一段时间内保持数天。我是唯一连接到服务器的客户端。连接之间的时间大约是秒,并且连接只保持足够长的时间以发送几个字节的单个消息。我目前看到几个小时后连接开始失败(WSAECONNREFUSED)。有什么我必须做的(例如套接字选项等),以确保这些频繁的重复连接将无限期地成功吗?谢谢!

1 个答案:

答案 0 :(得分:2)

当执行大量基于事务的连接并且TCP的TIME_WAIT状态持续时间(持续2MSL = 120秒)出现问题导致客户端主机无法再连接到特殊服务器主机时,您应该考虑UDP并自行管理重新发送丢失的请求。

我知道这听起来很奇怪。但是,像DNS这样的标准服务需要使用UDP来处理大量事务(请求在一个UDP段中单个答案),以避免您正在尝试自己的问题。 Web浏览器使用UDP向DNS发送请求。在短时间内使用UDP完成重新请求,我猜不会超过几毫秒。有时解析的名称太长,不适合UDP paquet。因此,DNS服务器发送带有专用标志的UDP回复,以便此次要求客户端使用TCP。

此外,如果在Windows平台上可用,您还可以考虑TCP的T / TCP扩展(Transactional TCP)。它提供具有较短TIME_WAIT状态的TCP可靠性,因为几乎不需要修改客户端代码。据我所知,它可能会工作,即使服务器不处理该扩展。作为附注,它目前没有在互联网上使用,因为它知道有一些缺陷......