socket编程中应用recv判断连接已断开
来源:互联网 发布:网络安全员 编辑:程序博客网 时间:2024/04/28 23:08
在网络编程中,经常会检测网络的连接情况,进而进行下面的动作。在Linux的socket编程中,有一种非常方便的方法,来判断对方是否断开了连接,就是使用recv函数。
在APUE 中,对 recv的表述如下,
#include <sys/socket.h>ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags); 返回值:返回数据的字节长度;若无可用数据或对等方已经按序结束,返回0;若出错,返回-1
如果发送端主动关闭传输,或是发送端主动关闭了连接后,recv最终会返回0.
利用这个特性,可以用 recv返回0来进行发送方断开连接的判断。
/* receive ready*/ if(FD_ISSET(clientfd,&rdset_tmp)){ recbytes = recv(clientfd,buff,RECV_DATA_LEN,0); if(recbytes>0){ /* recv data handle */ #if debug_printf printf("recv data %d bytes\n",recbytes); #endif if(buff[0]==0x56 && buff[1]==0x88) send_flag=0x55; }else if(recbytes==0){ /* the client disconnect 返回0,发送端已断开连接*/ #if debug_printf printf("client%d disconnect\n",clientIndex+1); #endif pthread_mutex_lock(&clientsMutex28000[i]); clients28000[clientIndex].isConn = 0; pthread_mutex_unlock(&clientsMutex28000[i]); pthread_mutex_lock(&activeConnMutex28000); if(activeConn) activeConn--; pthread_cond_signal(&connDis28000); pthread_mutex_unlock(&activeConnMutex28000); break; } }
需要注意的是:此种方法只能判断发送端主动断开连接的行为,对于网络异常等客观原因出现连接断开的情况无法判定,可以借助心跳数据等方式进一步判定。
0 0
- socket编程中应用recv判断连接已断开
- 如何判断socket已断开连接
- 判断Socket断开连接
- 客户端怎么判断Socket连接已与服务器断开
- 客户端怎么判断Socket连接已与服务器断开
- python socket.recv() 一直不停的返回空字符串,客户端怎么判断连接被断开?
- C#中判断socket是否已断开的方法
- C#中判断socket是否已断开的方法
- C#中判断socket是否已断开的方法
- C#中判断socket是否已断开的方法
- C#中判断socket是否已断开的方法
- java中判断socket网络远端是否断开连接
- java中判断socket网络远端是否断开连接
- java中判断socket服务器端是否断开连接 [经典]
- java中判断socket网络远端是否断开连接
- java中判断socket服务器端是否断开连接
- java中判断socket服务器端是否断开连接
- java中判断socket服务器端是否断开连接
- 一些前端小工具
- EMOOV 故障处理细节
- 21天学通C++之--继承实战练习
- Mysql 基本管理命令
- Android drawable animation(帧动画)
- socket编程中应用recv判断连接已断开
- 安装 assets 中的apk ,兼容6.0权限 处理7.0的崩溃
- Spring注解实现Bean注册时异常解决方案
- clips与C++的交互
- 创建模式->原型模式
- HelloChart折线图动态刷新--模拟心电图效果
- OkHttp源码解析(一)
- LeetCode 474.Ones and Zeroes & 486.Predict the Winner
- 初识测试