c++ - 处理 TCP 故障的正确机制是什么?

标签 c++ sockets tcp

我正在用 C++ 编写套接字程序。该程序运行在一组集群机器上。

刚刚进入socket编程,刚学会发送和接收。我认为,在程序长时间运行期间,一些 TCP 连接可能会丢失。在这种情况下,需要顺利地重新连接服务器和客户端。

不知道是否有一个众所周知的基 native 制(或算法?协议(protocol)?)来实现它。我发现有很多不同语义的套接字错误代码,这让我难以下手。

任何人都可以提供任何我可以从中学习的引用代码吗?

谢谢,

最佳答案

并不复杂。仅有的两个对连接不致命的错误代码是:

  • EAGAIN/EWOULDBLOCK,其实是同一个数字的两个名字,意思是在一段时间后,或者在select()/poll()/epoll()之后,可以重新尝试操作 已表明;
  • EINTR,意思是“中断的系统调用”- 再试一次。

所有其他对连接都是致命的,应该导致您关闭它。

关于c++ - 处理 TCP 故障的正确机制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43358282/

相关文章:

c++ - 迭代但不取消引用 C++ 中的无效迭代器

c++ - std::vector::end()[-1] 是未定义的行为吗?

Java 线程开销。我应该使用套接字还是套接字 channel ?

java - 如何从 TCP 服务器向 TCP 客户端发送回复?

C# TCP 服务器同时接收到 Python 客户端发送的两条消息

c++ - 连接数组中的整数?

c++ - 从十六进制转换为 LPCVOID 切断了地址的一半

java - Socket 的 PrintWriter 在关闭之前不会发送

c++ - 如果 send() 返回 x 个字节,recv() 是否在一次调用中获得相同数量的字节?

c++ - 在 boost::asio 中,为什么异步接受处理程序需要重新启动异步接受?