服务器判断http是否中断

时间:2024-11-23 17:36:38
一般来说,只需要send或者recv一下,如果结果为零,则为掉线。
1.当recv返回值为0是表示对方已经正常(MSDN说是完美的)的断开连接.
2.当recv返回SOCKET_ERROR时,说明对方已经断开连接,但是可能是非正常断开(断网或者客户端进程结束).
如果你担心在读的时候被阻塞,使用select(这个不太懂)
但是,在长连接下,有可能很长一段时间都没有数据往来。此时则需要心跳机制,TCP本身自带了心跳机制。
如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不会影响你自己定义的协议。所谓“心跳”就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”。 以确保链接的有效性。
所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。
总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。