gpt4 book ai didi

linux - TCP:通过断开的连接提高可靠性

转载 作者:可可西里 更新时间:2023-11-01 02:50:34 26 4
gpt4 key购买 nike

我正在开发一个应用程序,我需要确保即使网络出现故障,消息仍能可靠、按顺序且未修改地到达目的地。我一直在使用 TCP,直到现在,我只是在使用以下策略:

  • 如果发送/接收失败,请重试,直到没有错误为止。

  • 如果远程断开连接,请等到下一个连接并将我发送/接收的套接字替换为这个新套接字(通过一些线程和阻塞实现以确保它被干净地交换)。

    <

我最近意识到这是行不通的,因为 send 无法报告表明远程未收到消息的错误(引用例如 here )。

我还了解到 TCP 连接可以在短暂的网络中断后继续存在,因为内核会缓冲数据包,直到连接在超时期限后被宣布为死机(引用。 here ).

问题:在客户端/服务器端将超时时间设置得更高是否可行(使用 setsockoptSO_KEEPALIVE 选项),以便连接“永不超时”?我必须处理与内核缓冲区填满相关的错误,但这应该相对简单。

还有其他失败案例吗?

最佳答案

如果两端没有明确断开连接,即使您拔下电缆,tcp 连接也将永远保持打开状态。 TCP 中没有超时。

不过,我会在tcp之上使用(或设计)一个应用协议(protocol),使得重新连接后恢复数据传输成为可能。您可以使用 HTTP例如。

这会更加稳定,因为正如您所说,依赖缓冲区有时会耗尽缓冲区,但缓冲区也会在比方说断电时丢失。

关于linux - TCP:通过断开的连接提高可靠性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45542546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com