SOCKET连接状态检测问题

时间:2022-01-03 14:53:47
我现大做写一个HTTP客户端,为了提高效率,使用了Keep-Alive,实际测试发现,服务器支持这种模式。当我连续发送请求时,这个连接是一直建在的。但当我几分钟后再次发送请求时,其实服务器因为超时已将连接关闭,不过要命的是,我的send函数没有发现SOCKET已被关闭,居然正常的返回了,直到接下来的recv()返回0,我才知道连接被关闭了。
我原以为send能检测到SOCKET的状态,就在send里处理重连的问题,如果正常就发送,失败就重连再发送,现在证实这是不行的,但放在recv()里重连,我觉得也不好,逻辑混乱。有没有什么办法能在send前检查SOCKET的状态出来?

3 个解决方案

#1


SOCKET连接状态检测问题
心跳比如ajax搞

#2


http还搞心跳?

#3


不考虑很多人研究过的,中途断网等复杂情况,我知道那个得用心跳包才做到。我现在的需求是,服务器已经closesocket了,但是我客户端在send的时候不能发现连接已关闭,只有到recv的时候才发现。我需要在send前检查连接是否还建在。

#1


SOCKET连接状态检测问题
心跳比如ajax搞

#2


http还搞心跳?

#3


不考虑很多人研究过的,中途断网等复杂情况,我知道那个得用心跳包才做到。我现在的需求是,服务器已经closesocket了,但是我客户端在send的时候不能发现连接已关闭,只有到recv的时候才发现。我需要在send前检查连接是否还建在。