当前位置: 技术问答>linux和unix
socket编程,我如何确定与对方的连接是否正常?
来源: 互联网 发布时间:2015-11-04
本文导语: 我用socket写一个服务端程序,同时可以接受10个客户连接,但我如何确定与客户端的连接状态是否正常,也就是说我如何确定下面三种情况:对方正常close;对方不正常退出了客户端;与对方连接的网络不正常,网线...
我用socket写一个服务端程序,同时可以接受10个客户连接,但我如何确定与客户端的连接状态是否正常,也就是说我如何确定下面三种情况:对方正常close;对方不正常退出了客户端;与对方连接的网络不正常,网线断或其它问题。
我这样处理:
ioctl(fd,FIONREAD,&nread) ;
if(nread == 0) //对方close
{
close(fd) ;
}
但经常不能正确处理。
我这样处理:
ioctl(fd,FIONREAD,&nread) ;
if(nread == 0) //对方close
{
close(fd) ;
}
但经常不能正确处理。
|
自己加心跳检测。Linux的TCP协议栈支持心跳检测,具体选项忘了,自己查一下吧。
|
Heartbeat检测,就是定时握手信号。如果连续几次收不到,说明对方已经没有心跳了。
|
发测试帧
比如20秒没有收到数据表示对方退出了
不正常退出情况不少,可以在一些比如Send的返回值小于0时看 error值
如 broke pipe错误都可以得知的
比如20秒没有收到数据表示对方退出了
不正常退出情况不少,可以在一些比如Send的返回值小于0时看 error值
如 broke pipe错误都可以得知的
|
定时ack