求教检测socket对方断连的方法
检测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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
就是非正常断开 直接kill掉
ps:如果同台机器 kill掉这个进程 并close了fd 会不会影响到该套节字的另一端? 也被直接close掉/ 跟两台机器运行是否会不一样?
那就是接受数据出错了~~~
客户端如果正常断开,返回应该是0