求教检测socket对方断连的方法

发布于 2022-07-20 06:18:41 字数 927 浏览 5 评论 2

检测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都没有执行到

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

傲鸠 2022-07-23 07:40:56

就是非正常断开  直接kill掉   

ps:如果同台机器  kill掉这个进程 并close了fd  会不会影响到该套节字的另一端? 也被直接close掉/ 跟两台机器运行是否会不一样?

想你只要分分秒秒 2022-07-22 10:41:53

那就是接受数据出错了~~~
客户端如果正常断开,返回应该是0

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文