C++中TCP重传超时检测

TCP retransmission Timeout Detection in C++

本文关键字:超时 检测 重传 TCP C++      更新时间:2023-10-16

可能重复:
基于TCP 的C++函数

在我的windows C++应用程序中,我使用的是winsock API。

我想在我的C++函数中检测网络错误。

使用wireshark,我可以看到在出现网络错误后,会有TCP重传数据包。

你知道我如何用C++函数检测TCP重传超时吗?

基本上没有办法。套接字API就是不给您提供这种低级信息。您只能检测到全部连接故障。

如果你想要你想要的东西,你必须捕获网络数据包并像wireshark中那样进行流分析。否则,请澄清您为什么要检测到这一点。可能是tcp保持活动,或者udp就足够了。

如果连接断开,所有对recv(或WSARecv(的调用都将返回错误。TCP本身在协议中内置了数据包的重传,所以在大多数情况下,您实际上不需要做任何事情。

如果两个对等端之间的电缆以某种方式断开,那么在接收时不会出现错误。然后您必须实现自己的超时。如果您的高级协议使用请求-响应(即,您发送请求,另一个对等方返回响应(,那么很容易,如果在X秒内没有收到响应,则关闭连接并重新连接。

编辑针对评论:

TCP内置了这种重传,无法关闭它,也无法在第一次超时后出错。解决此问题的一种方法是使用UDP(SOCK_DGRAM(套接字。这样做的问题是,你必须自己处理所有事情,包括在没有响应的情况下处理超时。