LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1139|回复: 2

求教socket编程 检测对方异常关闭

[复制链接]
发表于 2006-6-27 19:49:21 | 显示全部楼层 |阅读模式
检测socket客户端异常断开时候可不可以这样子?
int numbytes = recv(Jinfo->clientfd, receive, rcvlen, 0);
  if ( numbytes <= 0){
        if (errno == EINTR){ 被中断        继续循环        }
        int s_errno;
        socklen_t len_t = sizeof(s_errno);
        if (getsockopt(Jinfo->clientfd, SOL_SOCKET, SO_ERROR, &s_errno, &len_t) == -1){
        printf("we have a SO_ERROR on socket %d, close and return it!\n", Jinfo->clientfd);
        close (Jinfo->clientfd);
        return 0;
        }
}
s_errno表示SO_ERROR值 当select检测到可读 但recv返回为0 或者-1时候表示对方断开???
我的程序中断客户端的时候  得到errno的值为104  不知道为什么  上面两个if都没有执行到
发表于 2006-6-28 10:39:14 | 显示全部楼层
(getsockopt(Jinfo->clientfd, SOL_SOCKET, SO_ERROR, &s_errno, &len_t) == -1) 是啥意思,检查getsockopt的返回值?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-28 16:11:29 | 显示全部楼层
Post by x11
(getsockopt(Jinfo->clientfd, SOL_SOCKET, SO_ERROR, &s_errno, &len_t) == -1) 是啥意思,检查getsockopt的返回值?

应该是这样吧?  我跟着别人学的  当select检测到可读 但read返回为0  表示套接口错误吧?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表