解决方案 »
- 如何修改 GroupBox 的背景颜色?
- 请教sqlite中语句sqlite3_exec(db,"select * from single_data",CallResult, NULL, &errMsg);和回调函数CallResult的问题.为什么回调函数CallResult中会出现数据丢失
- 求教!怎么刷新控件中的信息
- 奇怪的问题!请大家帮忙,谢谢!
- 哪里有vc++ 6.0下载啊?
- 用GDI做动画除了要用双缓冲外还要注意什么?
- 帮帮忙
- ZwQueryInformationThread 能否找出线程是否被暂停
- 内存不断增大怎么办?
- 两个问题:驱动程序调用以及动态连接库
- MultiByteToWideChar转化字符错误
- 单步调试无法进入函数内部,请高手指点
第一,我们为什么需要心跳包,一个tcp连接的一方意外断开时,另一端不会recv到一个socket_error吗?
为什么需要心跳包来一直不停的检测呢?心跳包保证你知道对方网络状态是良好的第二,SO_KEEPALIVE选项是否可以理解为内核帮我们做的一种心跳包机制?SO_KEEPALIVE有诊断意思,说心跳似乎也不是.
一般的网络错误,TCP/IP协议可以检测出来,但是一些特殊情况,比如拔掉网线,机器宕机,中间路由停机等情况,协议是检测不出来的,所以必须要通过心跳来检测。
SO_KEEPALIVE选项是TCP用来检测对方活性的方法,但是这个检测的时间太长,一般是两个小时以上才开始激活这个选项,你如果能接受的话,就用这个也没啥问题
一.确实不会,以外断开如:拔网线,直接断电,中间路由器损坏二.是的,正常2小时触发一次看下文章:
http://blog.csdn.net/jwybobo2007/archive/2011/01/25/6162784.aspx