客户端和服务器端非正常断开的问题。

isam 2004-03-23 01:44:51
如果服务器端和客户端由于断网和断电等原因连接断开了,服务器端怎么知道客户端断开了?出了心跳测试还有其它什么好的办法?大家常用的是什么办法?
...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxywh 2004-03-25
  • 打赏
  • 举报
回复
捕捉到SIGPIPE信号以后,要么忽略,要么做自己的事,程序是不会崩溃的。
isam 2004-03-25
  • 打赏
  • 举报
回复
那就是说只有用hart beaten 不断的又客户端返回存活消息才能知道客户端还在线了,不发的时候就表示挂了。
顺便问一下,SIGPIPE信号捕捉到以后程序是不是就不会崩溃了?
isam 2004-03-24
  • 打赏
  • 举报
回复
是不是往客户机发消息的时候检测呀?
benbensan 2004-03-24
  • 打赏
  • 举报
回复
服务器只能通过write才能检测,如果socket为阻塞的,则服务器的tcp协议栈会不断的重发,最后返回-1,errno设置为超时或者不可到达。
楼上有位提到的SIGPIPE应该不会出现,除非服务器write的过程中机器重起成功,此时客户收到服务器的第一个tcp分节时会响应一个RST,收到服务器的第二个tcp分节时才会报SIGPIPE

如果网络暂时断开后又恢复正常(在tcp重发分节的时限内),服务器和客户端应该都检测不到,又可以恢复正常
gaoxianfeng 2004-03-24
  • 打赏
  • 举报
回复
tcp本次发送就可以知道
udp 要等下一次发送 当然中间时间要够对方协议栈返回信息的时间
tcp会定时监测对端连接情况
morebin 2004-03-23
  • 打赏
  • 举报
回复
只有下一次发送数据时才能检测到吧,这时才会触发SIGPIPE信号。
wxywh 2004-03-23
  • 打赏
  • 举报
回复
检测到SIGPIPE信号时,表示网络断开。

23,120

社区成员

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

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