当前位置: 技术问答>linux和unix
客户端和服务器端非正常断开的问题。
来源: 互联网 发布时间:2015-06-11
本文导语: 如果服务器端和客户端由于断网和断电等原因连接断开了,服务器端怎么知道客户端断开了?出了心跳测试还有其它什么好的办法?大家常用的是什么办法? | 检测到SIGPIPE信号时,表示网络...
如果服务器端和客户端由于断网和断电等原因连接断开了,服务器端怎么知道客户端断开了?出了心跳测试还有其它什么好的办法?大家常用的是什么办法?
|
检测到SIGPIPE信号时,表示网络断开。
|
tcp本次发送就可以知道
udp 要等下一次发送 当然中间时间要够对方协议栈返回信息的时间
tcp会定时监测对端连接情况
udp 要等下一次发送 当然中间时间要够对方协议栈返回信息的时间
tcp会定时监测对端连接情况
|
服务器只能通过write才能检测,如果socket为阻塞的,则服务器的tcp协议栈会不断的重发,最后返回-1,errno设置为超时或者不可到达。
楼上有位提到的SIGPIPE应该不会出现,除非服务器write的过程中机器重起成功,此时客户收到服务器的第一个tcp分节时会响应一个RST,收到服务器的第二个tcp分节时才会报SIGPIPE
如果网络暂时断开后又恢复正常(在tcp重发分节的时限内),服务器和客户端应该都检测不到,又可以恢复正常
楼上有位提到的SIGPIPE应该不会出现,除非服务器write的过程中机器重起成功,此时客户收到服务器的第一个tcp分节时会响应一个RST,收到服务器的第二个tcp分节时才会报SIGPIPE
如果网络暂时断开后又恢复正常(在tcp重发分节的时限内),服务器和客户端应该都检测不到,又可以恢复正常
|
只有下一次发送数据时才能检测到吧,这时才会触发SIGPIPE信号。
|
捕捉到SIGPIPE信号以后,要么忽略,要么做自己的事,程序是不会崩溃的。