问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何判断websocket断开

发布网友 发布时间:2022-04-26 09:58

我来回答

2个回答

热心网友 时间:2022-06-27 02:26

法一:

当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。

法二:

struct tcp_info info;
int len=sizeof(info);
getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
if((info.tcpi_state==TCP_ESTABLISHED)) 则说明未断开 else 断开

法三:

若使用了select等系统函数,若远端断开,则select返回1,recv返回0则断开。其他注意事项同法一。

法四:

int keepAlive = 1; // 开启keepalive属性
int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测
int keepInterval = 5; // 探测时发包的时间间隔为5 秒
int keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.

setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));

设置后,若断开,则在使用该socket读写时立即失败,并返回ETIMEDOUT错误

法五:

自己实现一个心跳检测,一定时间内未收到自定义的心跳包则标记为已断开。

热心网友 时间:2022-06-27 02:26

当使用 select()函数测试一个socket是否可读时,如果select()函数返回值为1,且使用recv()函数读取的数据长度为0 时,就说明该socket已经断开。
为了更好的判定socket是否断开,我判断当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR 。如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 java 服务端怎么释放http连接 如何实现java http长连接推送数据 java的自动发送心跳包究竟是该写在服务器还是客户端 SO_KEEPALIVE是java中哪个类的呀,是什么意思呀 大理州有哪些旅游景点 云南大理有哪些好耍的地方 云南大理有哪些好玩的地方 云南大理有哪些好玩的? 大理宾川鸡足山景区的景区概述 云南大理有哪些景点 云南大理南涧旅游景点和宾川哪个好玩? 大理宾川有哪些旅游景点 提子酒跟红酒有什么区别么? 葡萄蒸馏酒和红提葡萄蒸馏酒有什么区别? 酿酒使用葡萄,食用葡萄和提子到底有什么区别 人教版初二物理下预习 提子酒和葡萄酒一样吗? 人教版八年级下册物理期中复习提纲 提子是葡萄吗?可不可以用它酿葡萄酒? 初二物理人教版下册一至八章所有计算公式和知识点. 求计算公式的整理.各条公式的原型及变形公式. java.net.SocketException: Software caused connection abort: recv failed Java netty的option(ChannelOption.SO_BACKLOG, backLog)什么意思 apache mina 是长连接还是短连接 如何整合Apache与Tomcat 微信小程序怎么改变picker-view的背景颜色 微信小程序的picker组件不能使用对象怎么办 微信小程序picker只能是数组吗 微信小程序picker有没有触发 小程序怎么判断picker mode region 小程序商城列表的数据是绑定在js 怎么实现下拉? “索取销售款凭据”是指什么? 求助,取得索取营业收入款项凭证是什么意思 有个问题求教:销售货物或应税劳务的纳税义务的发生时间为收讫销售款项或取得索取销售款项凭据的当天。 如何确定取得索取销售款项凭据的“当天”? 销售款项凭据是指什么 房地产开发企业自行开发房地产的会计处理有哪些 房地产企业预售阶段取得的成本票据企业所得税汇算吋如何处理? 老师您好,(一)采取直接收款方式销售货物,不论货物是否发出。均为收到销售额或取得索取销售额的凭据, 什么是会计确认,计量和报告的空间范围? 房地产企业确认销售收入的条件有哪些