tcp长连接判断对方断开的方法
来源:互联网 发布:什么叫九宫格算法 编辑:程序博客网 时间:2024/06/05 12:44
1、心跳包
2、keepalive检测,对于设置了keepalive来说,当tcp检测到对端socket不再可用时(不能发出探测包,或探测包没有收到ACK的响应包),select会返回socket可读,并且在recv时返回-1,同时置上errno为ETIMEDOUT。此时TCP的状态是断开的。
- struct TCP_KEEPALIVE {
- unsigned long onoff;
- unsigned long keepalivetime;
- unsigned long keepaliveinterval;
- } ;
- #define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4)
- /* KeepAlive实现 */
- void set_keepalive (SOCKET s)
- {
- BOOL bKeepAlive = TRUE;
- int nRet = ::setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (char*)&bKeepAlive, sizeof(bKeepAlive));
- if (nRet == SOCKET_ERROR)
- {
- return ;
- }
- /* 输入参数 */
- struct TCP_KEEPALIVE inKeepAlive = {0};
- unsigned long ulInLen = sizeof(struct TCP_KEEPALIVE);
- /* 输出参数 */
- struct TCP_KEEPALIVE outKeepAlive = {0};
- unsigned long ulOutLen = sizeof(struct TCP_KEEPALIVE);
- unsigned long ulBytesReturn = 0;
- int ret = 0;
- /* 设置keepalive 为5秒,并且发送次数为3次 */
- inKeepAlive.onoff = 1;
- /* 2次keepalive探测间隔时间 */
- inKeepAlive.keepaliveinterval = 5000;
- /* 开始首次keepalive探测前的tcp空闲时间 */
- inKeepAlive.keepalivetime = 5000;
- ret = WSAIoctl((unsigned int)s,
- SIO_KEEPALIVE_VALS,
- (LPVOID)&inKeepAlive,
- ulInLen,
- (LPVOID)&outKeepAlive,
- ulOutLen,
- &ulBytesReturn,
- NULL,
- NULL);
- if (ret == SOCKET_ERROR)
- {
- printf ("error: %d\n", WSAGetLastError());
- }
- }
阅读全文
0 0
- tcp长连接判断对方断开的方法
- tcp长连接判断对方断开的方法
- tcp长连接判断对方断开的方法
- 用select检测对方断开tcp连接
- Java TCP socket 判断对方是否在线的方法
- 如何判断一个tcp连接已经断开
- TCP socket如何判断连接断开
- Tcp服务端判断客户端是否断开连接
- tcp 服务端如何判断客户端断开连接
- TCP的连接和断开
- TCP的连接与断开
- TCP的连接和断开
- TCP的连接和断开
- Linux检测TCP连接断开的一种简单实现方法
- Linux检测TCP连接断开的一种简单实现方法
- JAVA NIO写服务端判断客户端断开连接的方法
- 服务器中判断客户端socket断开连接的方法
- 服务器中判断客户端socket断开连接的方法
- hadoop运行环境的搭建
- 代码整洁之道——第1章 整洁代码
- 百度云分享1000G编程视频和编程书籍(包括Java,Python,C语言,数据库等)
- 信道复用技术
- Ubuntu16.04+cuda8.0+cudnn7.0.5+opencv3.1+caffe+配置python接口的安装教程(超详细)
- tcp长连接判断对方断开的方法
- java并发之加锁
- kafka
- ucontext-人人都可以实现的简单协程库
- 数据结构--顺序表和单链表的比较
- 数据结构之算法篇
- 冒泡排序
- hibernate的一对多的写法或者多对一的写法(xml文件配法)
- Java汉字转换为拼音