请教:网络编程中网络中断的处理?
我在服务器端用select监测并处理多个客户数据。
如果连接成功后网线突然拔掉,select并不能检
测到客户已经掉线, 如何处理这个问题?谢谢
//注:用setsockopt(SO_KEEPALIVE)有用么?
还有没有其他的方法?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我在服务器端用select监测并处理多个客户数据。
如果连接成功后网线突然拔掉,select并不能检
测到客户已经掉线, 如何处理这个问题?谢谢
//注:用setsockopt(SO_KEEPALIVE)有用么?
还有没有其他的方法?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
用SO_KEEPALIVE应该有用,我在公司做过测试,服务器和客户端连接后,禁用服务器网络,过几分钟启用服务器网络,这时客户端注销,服务器显示客户端断开连接;服务器和客户端连接后,禁用服务器网络,这时客户端注销,此时服务器上显示连接正常,过几分钟启用服务器网络,服务器显示客户端断开连接。
不过书上说2小时内没有数据交换,才会发送保持存活探测分节,我想不通的是我测试中服务器怎么这么快就知道连接是否正常?是不是测试方法不对?
不好意思,自己顶一下,有没有人知道解决方法,谢谢!
我把程序伪代码贴出来:
int main() {
//create server proc
lisnfd = socket(...);
bind(lisnfd, servAddr...);
listen(lisnfd, 5); //listen, wait client to connect me
while(1) {
nready = select(maxfd, ...);
connfd = accept(lisnfd, fromAddr...); //connect with client
if ( FD_ISSET(lisnfd)... ) {
cout<<"new client detected"<<endl;
clientNum++;
}
.......
}
return 0;
}
我在服务器端用select函数监测在线客户。
但有一个问题:如果连接成功后网线突然拔掉,
select并不能检测到客户已经掉线, 如何处理这个问题?谢谢!
[ 本帖最后由 wanghun 于 2006-7-11 16:40 编辑 ]
能不能具体点,谢谢!