判断客户端掉线

awjx 2014-11-18 11:36:13
linux发送缓冲区最小2048,也就是说无法关闭发送缓冲区,这样的话,如果设计的心跳只是判断发送,而不判断接收,那根本起不到自检的作用

而别人的服务器也不提供心跳应答包,那我做为客户端,怎样判断非正常掉线了?

如果发送缓冲区可设为0,那send一次就能判断,现在最小是2048,意味着我要发这么多才能知道掉线了?

这种情况,该怎样判断客户端掉线了?困扰我几天了!
...全文
194 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
awjx 2014-11-24
  • 打赏
  • 举报
回复
引用 2 楼 pottichu 的回复:
拔掉网线的情况, send 和 recv 都不会返回错误, 你可以检查 网线是否有接入来判断。 但是解决不了根本问题, 如果服务器掉线, 你还是无法判断。 如果服务器在外网,也无法判断。 要从根本上解决问题, 还是要修改协议。 没有心跳协议, 有没有其他的 一对一对的应答协议? 是否可以借用来当心跳包?
一对一的应答是业务数据,不能乱传。
williamhong 2014-11-24
  • 打赏
  • 举报
回复
用keepalive不就可以了吗?
pottichu 2014-11-19
  • 打赏
  • 举报
回复
拔掉网线的情况, send 和 recv 都不会返回错误, 你可以检查 网线是否有接入来判断。 但是解决不了根本问题, 如果服务器掉线, 你还是无法判断。 如果服务器在外网,也无法判断。 要从根本上解决问题, 还是要修改协议。 没有心跳协议, 有没有其他的 一对一对的应答协议? 是否可以借用来当心跳包?
awjx 2014-11-18
  • 打赏
  • 举报
回复
我查了下,win下掉了,recv很快就会返回,这时知道掉线。 但linux下,如果拨了网线recv不返回,send也是成功。 直到缓冲区满了,才知道掉线了,,, 但这么久才知道掉线,那sndbuf的数据就丢了,,,

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧