SOCKET编程中服务器异常退出,客户端如何检测 服务器异常退出(断电,网线断了),客户端还在recv那里等待接收数据,请问如何使客户端立即判断出服务器已退出。我的recv是在一个线程中。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我用异步的,监听FD_CLOSE以及一个怪数字的消息退出~ 不是很明白,能不能说清楚点。FD_CLOSE你是用了什么模型吗? 我现在的状况是,服务器退出了。但我的客户端还在recv这里阻塞。 服务器异常退出(断电,网线断了),recv函数会返回失败用WSAGetLastError函数获取返回值判断 难道你的recv没有判断返回值? 服务器退出后,recv一直处于等待接收的状态,根本就没有返回一个数值啊 setsocketopt(), 把timeout的参数设置一下,别在那里等到地球爆炸,recv()等个几秒几十秒也就行了 加心跳吧,服务器物理网络断掉的话,recv是会一直不退出的 楼主,要搞清这个问题,你近几年内只有这一次机会,请看:当对等方断开连接,情况会有以下2种情况: 1 软件断开:这种情况,对等放会发来FIN,所以recv函数会返回,并返回0。2 物理断开:这种属于灾难性,比如海底光缆被大白鲨咬断了等等。你的recv函数不会有任何响应,45分钟后,它将返回一个错误,这是TCP保活定时器产生的事件。如何知道,对等方已经断开了呢? 保险的方法只有心跳包,定时发送,并接受心跳包,一旦超时不到,就断开连接,并回收资源。不要胡思乱想,这是唯一的办法。 先设置recv和send的超时时间,然后用select判断有数据可读的时候再读取。如果能加上心跳的功能就最好了。 判断recv函数会返回值,如果发送速度快,可能就不好用了 为什么不用ping,加个定时器,或者设置你的应用层收不到数据就ping一次目标机,当目标机断网或断点就ping不通。用recv的话,如果目标机网络正常,而应用层没有数据发送时不也返回-1吗?怎么判断目标机异常啊?! 请教:VC做一个像关闭计算机时,其他窗口都灰掉并且不能操作! zhoujianhei 来接分(二)! 数字排序代码的一个问题 如何定义一个compile-time宏 CSocket传输文件问题 vc程序怎样打包 关于spin控件的小问题 VC++6.0和flashget冲突的问题? ××网络传输屏幕的问题×× 北京的朋友們,有誰知道久其軟件公司,請發言討論!發言有分!!!!! 几万人同时访问的服务器,用wsaasyncselect套接字模型合适吗? 关于Variant变量的连接
1 软件断开:这种情况,对等放会发来FIN,所以recv函数会返回,并返回0。
2 物理断开:这种属于灾难性,比如海底光缆被大白鲨咬断了等等。你的recv函数不会有任何响应,45分钟后,它将返回一个错误,这是TCP保活定时器产生的事件。如何知道,对等方已经断开了呢? 保险的方法只有心跳包,定时发送,并接受心跳包,一旦超时不到,就断开连接,并回收资源。不要胡思乱想,这是唯一的办法。
用recv的话,如果目标机网络正常,而应用层没有数据发送时不也返回-1吗?怎么判断目标机异常啊?!