tcp长连接判断对方断开的方法
来源:互联网 发布:php 布尔型 编辑:程序博客网 时间:2024/05/17 07:19
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断开连接的方法
- Leveldb 实现原理
- Cocopods 使用总结
- 基本小命令
- 242. Valid Anagram
- 多重部分和(2)
- tcp长连接判断对方断开的方法
- 人工神经网络
- poj 1151(线段树+扫描线)
- 如何做到js绑定事件的同时不执行事件
- 应用服务器性能优化总结
- GC
- 事务隔离级别
- can't open /dev/tty2: No such file or directory问题解决 亲自实验
- Unity3D调用摄像头显示当前拍摄画面