Networking 使用TCP连接时是否应发送保持活动的数据包?

Networking 使用TCP连接时是否应发送保持活动的数据包?,networking,tcp,keep-alive,Networking,Tcp,Keep Alive,我的问题是,我已经创建了一个TCP连接,当它保持不传输任何数据约1小时时,它已经与服务器断开连接,但它没有通知我,它已断开连接,我是否应该向服务器发送保持活动的数据包?或者我应该从服务器向客户端发送保持活动的数据包吗?还是两个都寄 是的,你应该。几天前,我创建了一个TCP套接字/服务器应用程序,我遇到了同样的问题。我通过开始发送保持活动状态的数据包来修复它 如果您发送保持活动的数据包,您的问题将消失 我听一些人说,操作系统将为您发送keep-alive数据包,我对此不太熟悉,但发送keep-al

我的问题是,我已经创建了一个TCP连接,当它保持不传输任何数据约1小时时,它已经与服务器断开连接,但它没有通知我,它已断开连接,我是否应该向服务器发送保持活动的数据包?或者我应该从服务器向客户端发送保持活动的数据包吗?还是两个都寄

是的,你应该。几天前,我创建了一个TCP套接字/服务器应用程序,我遇到了同样的问题。我通过开始发送保持活动状态的数据包来修复它

如果您发送保持活动的数据包,您的问题将消失

我听一些人说,操作系统将为您发送keep-alive数据包,我对此不太熟悉,但发送keep-alive数据包对我来说非常有效

它不会通知我它已断开连接

不可能。除了在下次尝试I/O时引发EOS或“连接重置”之外,它没有其他方法可以这样做

我是否应该发送保留的数据包


如果你有这个问题,是的。一般来说,可能不是

操作系统应该为您发送TCP keepalives。不过,在发送它们之前,它可能会等待很长时间;我似乎记得建议的间隔是2小时。@默认的TCP keepalive间隔是2小时,默认情况下它是关闭的。@EJP实际上在默认情况下是打开的,注意其他中间状态网络设备将在2小时之前超时,请参阅:操作系统默认为2小时,不建议更改此设置,因为它会影响从该计算机建立的所有TCP连接,因此请改为实现您自己的连接,现在的问题是多久执行一次,请参阅此处: