TCP重传在C ++中的超时检测

时间:2011-11-24 07:34:34

标签: c++ networking tcp

  

可能重复:
  C++ Functions According to TCP

在我的Windows C ++应用程序中,我正在使用winsock API。

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

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

您知道如何使用C ++函数检测TCP重新传输超时吗?

2 个答案:

答案 0 :(得分:1)

基本上没办法。套接字API只是不会给你这样的低级信息。您只能检测总连接失败。

如果您想要完全满足您的要求,您必须捕获网络数据包并像wireshark一样进行流量分析。否则,请说明您为什么要检测到这一点。可能是tcp keepalive或udp就足够了。

答案 1 :(得分:0)

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

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

修改以回应评论:

TCP内置了此重新传输,无法将其关闭,或在第一次超时后收到错误。解决此问题的一种方法是使用UDP(SOCK_DGRAM)套接字。这个问题是你必须自己处理所有事情,包括如果没有回复就处理超时。