Chinaunix首页 | 论坛 | 博客
  • 博客访问: 277585
  • 博文数量: 84
  • 博客积分: 3186
  • 博客等级: 中校
  • 技术积分: 852
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-15 15:46
文章分类

全部博文(84)

文章存档

2015年(1)

2014年(12)

2011年(29)

2010年(42)

分类: LINUX

2010-05-27 21:22:27

文件: keepalive.rar
大小: 2KB
下载: 下载
keep alive 程序
 
写两个c/s结构程序,client与server的连接建立起来之后,双方不发送任何数据,server端sleep,client端处于阻塞式recv,会发现在设置了keep alive时,在间隔的时间内,确实有keep alive的探测包往来。拔网线, client端可以迅速的知道,返回错误码为ETIMEOUT。抓包工具为tcpdump和wireshark,在ubuntu上,windows XP下测试结果相同。
 
如果有数据发送,将没有探测包往来。即使拔掉网线,send的一方也不会察觉到,因为它认为连接上是有数据的。所以在应用层如果设置了心跳,keep alive将失效。另外,拔网线时,linux下的send直到socket buffer满,即无法塞数据时,才返回EAGAIN错误,无法和真正的网络忙区分开。
 
压缩包内为测试程序源文件。
 
阅读(952) | 评论(0) | 转发(0) |
0

上一篇:keep alive

下一篇:gethostbyname失败

给主人留下些什么吧!~~