【发布时间】:2016-03-02 18:48:09
【问题描述】:
我有一个C 服务应用程序,它使用tcp socket 连接到服务器。服务器不时发送数据。此外,我的应用程序每 15 秒发送一次心跳。但有时它会在服务器似乎认为连接处于活动状态时断开连接。现在,如果我尝试重新连接服务器会拒绝,因为它一次只为客户端保留一个连接。
保持持久tcp connection 的最佳方式是什么?
编辑: 服务器通常会在 2 分钟后断开连接而没有心跳。因此,在我发现我的连接已关闭后,我需要 2 分钟才能成功重新连接。我想尽量减少这个时间。
【问题讨论】:
-
您对持久性的期望是什么(例如电缆断开或接入点出现故障),我认为您的问题没有解决方案。
-
@dvhh 问题主要发生在发送心跳期间,有时会出现 sigpipe 或其他问题。服务器似乎认为连接没有关闭。
-
服务器上没有看门狗在没有收到心跳的情况下关闭连接吗?
-
显示一些代码,你的问题太笼统了...反正程序定义的心跳不是一个好主意,你最好使用UTO TCP参数。
-
你总是可以同时解决这两个问题。将您的服务器变成真正的服务器(即可以处理多个独立的连接),并使用 TCP keepalive 来识别并关闭任何剩余的“半连接”。