在我的Windows C ++应用程序中,我正在使用winsock API。
我想检测C ++函数中的网络错误。
使用wireshark我可以看到在出现网络错误后会有TCP重传数据包。
您知道如何使用C ++函数检测TCP重新传输超时吗?
答案 0 :(得分:1)
基本上没办法。套接字API只是不会给你这样的低级信息。您只能检测总连接失败。
如果您想要完全满足您的要求,您必须捕获网络数据包并像wireshark一样进行流量分析。否则,请说明您为什么要检测到这一点。可能是tcp keepalive或udp就足够了。
答案 1 :(得分:0)
如果连接断开,对recv
(或WSARecv
)的所有调用都将返回错误。 TCP本身具有内置于协议中的数据包的重传,因此在大多数情况下您不需要做任何事情。
如果两个对等体之间的电缆断开某些方式,那么接收时就不会出现错误。然后你必须实现自己的超时。如果您的更高级别协议正在使用请求 - 响应(即您发送请求而另一个对等方返回响应),则很容易,如果在X秒内未收到响应,则关闭连接并重新连接。
修改以回应评论:
TCP内置了此重新传输,无法将其关闭,或在第一次超时后收到错误。解决此问题的一种方法是使用UDP(SOCK_DGRAM
)套接字。这个问题是你必须自己处理所有事情,包括如果没有回复就处理超时。