C++中TCP重传超时检测
TCP retransmission Timeout Detection in C++
可能重复:
基于TCP 的C++函数
在我的windows C++应用程序中,我使用的是winsock API。
我想在我的C++函数中检测网络错误。
使用wireshark,我可以看到在出现网络错误后,会有TCP重传数据包。
你知道我如何用C++函数检测TCP重传超时吗?
基本上没有办法。套接字API就是不给您提供这种低级信息。您只能检测到全部连接故障。
如果你想要你想要的东西,你必须捕获网络数据包并像wireshark中那样进行流分析。否则,请澄清您为什么要检测到这一点。可能是tcp保持活动,或者udp就足够了。
如果连接断开,所有对recv
(或WSARecv
(的调用都将返回错误。TCP本身在协议中内置了数据包的重传,所以在大多数情况下,您实际上不需要做任何事情。
如果两个对等端之间的电缆以某种方式断开,那么在接收时不会出现错误。然后您必须实现自己的超时。如果您的高级协议使用请求-响应(即,您发送请求,另一个对等方返回响应(,那么很容易,如果在X秒内没有收到响应,则关闭连接并重新连接。
编辑针对评论:
TCP内置了这种重传,无法关闭它,也无法在第一次超时后出错。解决此问题的一种方法是使用UDP(SOCK_DGRAM
(套接字。这样做的问题是,你必须自己处理所有事情,包括在没有响应的情况下处理超时。
相关文章:
- 使用CMake检测支持的C++标准
- 当套接字连接断开时检测C/C++Unix
- C/C++预处理器是否可以检测一些编译器选项
- WMI检测进程创建事件-c++
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 下面是我为检测链接列表中的循环而制作的代码
- 落砂模拟碰撞检测C++和SFML
- C++减少modbus_connect超时
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么C++编译器没有检测到正确声明的类?
- 检测win32服务创建和删除的最佳方法
- 没有超时的C++条件变量
- 正在LLVM中检测整数比较条件
- 如何在鼠标挂钩过程中检测拖动
- 位移操作和位掩码未检测到重复字符
- 检测 COFF 对象文件中C++内联符号
- 在选择函数中检测超时的客户端
- 在 FFMPEG 中检测到超时
- C++中TCP重传超时检测
- 从一组套接字中检测超时套接字