局域网SOCKET通信(TCP)需要心跳包来保持长连接么
2011-07-24 17:43
309 查看
偶然看到,免得忘了,拿来主义,知道结果即可,不追究
链接如下,在第7楼
http://cache.baidu.com/c?m=9d78d513d98510ed4fece4697c66c0171b4381132ba6d3020ca58438e5732d405321a3e52878564291d27d141cb20c19afe73605705862eade9fc85dddccc375709577643101c01b52844af9dc4653c2259559eeaf0ee7ccf32593d8d1c4df23098c0c5b&p=937fc54ad08116ea0be2932c4b&user=baidu&fm=sc&query=tcp%CB%C0%C1%AC%BD%D3&qid=c7099cd305983c17&p1=20
套接字本身是有一套心跳保活机制的,不过默认的设置并不像我们一厢情愿的那样有效。在双方TCP套接字建立连接后(即都进入ESTABLISHED状态)并且在两个小时左右上层没有任何数据传输的情况下,这套机制才会被激活。
很多人认为两个小时的时间设置得很不合理。为什么不设置成为10分钟,或者更短的时间?(可以通过SO_KEEPALIVE选项设置。)但是这样做其实并不被推荐。实际上这套机制只是操作系统底层使用的一个被动机制,原理上不应该被上层应用层使用。当系统关闭一个由KEEPALIVE机制检查出来的死连接时,是不会主动通知上层应用的,只有在调用相应的IO操作在返回值中检查出来。
因此,忘记SO_KEEPALIVE,在应用层自己写一套保活机制比较靠谱。
链接如下,在第7楼
http://cache.baidu.com/c?m=9d78d513d98510ed4fece4697c66c0171b4381132ba6d3020ca58438e5732d405321a3e52878564291d27d141cb20c19afe73605705862eade9fc85dddccc375709577643101c01b52844af9dc4653c2259559eeaf0ee7ccf32593d8d1c4df23098c0c5b&p=937fc54ad08116ea0be2932c4b&user=baidu&fm=sc&query=tcp%CB%C0%C1%AC%BD%D3&qid=c7099cd305983c17&p1=20
套接字本身是有一套心跳保活机制的,不过默认的设置并不像我们一厢情愿的那样有效。在双方TCP套接字建立连接后(即都进入ESTABLISHED状态)并且在两个小时左右上层没有任何数据传输的情况下,这套机制才会被激活。
很多人认为两个小时的时间设置得很不合理。为什么不设置成为10分钟,或者更短的时间?(可以通过SO_KEEPALIVE选项设置。)但是这样做其实并不被推荐。实际上这套机制只是操作系统底层使用的一个被动机制,原理上不应该被上层应用层使用。当系统关闭一个由KEEPALIVE机制检查出来的死连接时,是不会主动通知上层应用的,只有在调用相应的IO操作在返回值中检查出来。
因此,忘记SO_KEEPALIVE,在应用层自己写一套保活机制比较靠谱。
相关文章推荐
- 局域网SOCKET通信(TCP)需要心跳包来保持长连接么
- 局域网SOCKET通信(TCP)需要心跳包来保持长连接么
- CocoaAsyncSocket网络通信使用之tcp连接(一)
- Socket通信完整实例(心跳包,客户端断线重连,服务端超时断开客户端连接)
- 网络编程的概述2 网络通信中的三要素3 InetAddress的概述和测试,IP地址:InetAddress 传输协议(网络协议)TCP 可靠协议,需要连接,效率会稍低 没有大小的限制UDP 不:
- Wifi局域网的Socket通信(只能一对一的连接的情况)
- API SOCKET基础(一) TCP建立连接并通信
- socket实现TCP通信_TCP连接android与单片机(2016_03_21)
- Linux socket编程入门及客户端服务器端通信实现 – 提高篇:TCP连接过程分析
- CocoaAsyncSocket网络通信使用之tcp连接(一)
- CocoaAsyncSocket网络通信使用之tcp连接
- C# 局域网内socket通信 TCP
- TCP连接与断开详解(socket通信)
- Android与PC的Socket(TCP/IP)通信(by USB) 拒绝连接的
- API SOCKET基础(一) TCP建立连接并通信
- linux下第一个socket编程实现的局域网内通信(基于TCP)
- Socket心跳包保持长连接
- NDK Socket编程:面向连接的通信(tcp)
- 一个基于VB.net的异步Socket网络TCP通信可防止任意一端意外终止TCP连接的类,。
- Socket TCP连接相互通信