当前位置:  技术问答>linux和unix

如何得知对方已关闭连接?

    来源: 互联网  发布时间:2015-01-06

    本文导语:  我是Client端,用Select阻塞等待数据包,用recv读数据,当返回为-1时判断为对方断开。 可好像行不通,对方一断开,我的Recv返回总是为零。 代码如下: switch(iRet = select(pClient->sockfd+1, &fdR, NULL, NULL, &timeout)){ case -1...

我是Client端,用Select阻塞等待数据包,用recv读数据,当返回为-1时判断为对方断开。

可好像行不通,对方一断开,我的Recv返回总是为零。
代码如下:
switch(iRet = select(pClient->sockfd+1, &fdR, NULL, NULL, &timeout)){
case -1 : // Select异常
fprintf(stderr, "CSocketClient::OnRecv::select:: sockfd-%d, errno-%d>>%sn", pClient->sockfd, errno, strerror(errno));
break;
case  0 : // 超时
fprintf(stderr, "CSocketClient::OnRecv::select:: timeout!n");
continue;
default :
fprintf(stderr, "select returns::%dn", iRet);
if (FD_ISSET(pClient->sockfd, &fdR)){
if ((len = recv(pClient->sockfd, (unsigned char *)&hLength, 4, 0)) == -1){ // 对方断开连接
pClient->bConnect = false;
fprintf(stderr, "CSocketClient::OnRecv::select:: sockfd-%d, errno-%d>>%sn", pClient->sockfd, errno, strerror(errno));
break;
}

|
返回0表示对方正常关闭推出,-1表示出现错误

|
我也遇到这个问题了,我的解决方法是两端协商不会发送大小为0的数据,这样当recv()的返回值为0时,即表明已断开连接,另外不知你试过没有好像发送大小为0的数据时不一定可以发送出去,不知道为什么?我也想知道有没有更好的方法来判断对方断开连接?
另外在此也向你请教一个问题,除了用select(),有没有别的方法来控制超时,因为我想把超时控制封装在一个类中,实现一个通用的方法,而select()好像对消息队列不能使用。不知你用过alarm()来控制超时么?我在Linux下为什么系统信号不中断recv()的阻塞?

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 急,急,急:如何得知JEditorPane内是否选取文字?
  • 请问如何用C得知某个目录所占用的磁盘空间?
  • 我装的linux,但是怎样得知自己系统的版本啊?
  • 機架式pc擁有12個網路chip如何得知封包由哪個interface出去的?
  • NOSQL iis7站长之家
  • 两个没有亲缘的进程A和B,如何在进程B中得知进程A的PID号呢?
  • 如何得知一个客户端的IP是静态的还是动态的?
  • 应用程序如果得知USB设备的插拔
  • 请问Unix下是否有函数得知“指定文件是否被打开”?
  • 请问如何得知linux中是否安装有xfree86?
  • 如何得知某用户,当前是否已近登录系统?
  • 如何得知,当前所有每个用户的磁盘使用情况
  • 如何让自己的程序得知linux系统即将重启还是关机?
  • 怎样从applet中得知浏览器是IE还是Netscape
  • 请问如何得知某个usb设备已经插上并且可用?
  • 用linux做局域网服务器,结果上网很慢,怎样得知服务器网络方面的运行状态 --急急急在线等--
  • 紧急! 如何得知一特定表是否存在的信息?(ORACLE).....
  • 做网页有时会用到"HTTP_USER_AGENT"或"REMOTE_ADDR"这样的参数,这到底是一个什么参数,如何得知这一类参数的全部信息?谢谢
  • 各位,线程的run方法不允许抛出异常,那我的调用程序如何得知线程里发生了异常?
  • 急问:如何得知linux下设备的使用情况


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3