当设置为true的时候,TCP会实现监控连接是否有效,当连接处于空闲状态的时候,超过了2个小时,本地的TCP实现会发送一个数据包给远程的 socket,如果远程没有发回响应,TCP会持续尝试11分钟,知道响应为止,如果在12分钟的时候还没响应,TCP尝试关闭socket连接。

keepalive不是说TCP的常连接,当我们作为服务端,一个客户端连接上来,如果设置了keeplive为true,当对方没有发送任何数据过来,超过一个时间(看系统内核参数配置),那么我们这边会发送一个ack探测包发到对方,探测双方的TCP/IP连接是否有效(对方可能断点,断网)。如果不设置,那么客户端宕机时,服务器永远也不知道客户端宕机了,仍然保存这个失效的连接。

当然,在客户端也可以使用这个参数。客户端Socket会每隔段的时间(大约两个小时)就会利用空闲的连接向服务器发送一个数据包。这个数据包并没有其它的作用,只是为了检测一下服务器是否仍处于活动状态。如果服务器未响应这个数据包,在大约11分钟后,客户端Socket再发送一个数据包,如果在12分钟内,服务器还没响应,那么客户端Socket将关闭。如果将Socket选项关闭,客户端Socket在服务器无效的情况下可能会长时间不会关闭。

尽管keepalive的好处并不多,但是很多开发者提倡在更高层次的应用程序代码中控制超时设置和死的套接字。同时需要记住,keepalive不允许你为探测套接字终点(endpoint)指定一个值。所以建议开发者使用的另一种比keepalive更好的解决方案是修改超时设置套接字选项。

说白了:这个参数其实对应用层的程序而言没有什么用。可以通过应用层实现了解服务端或客户端状态,而决定是否继续维持该Socket。

最新文章

  1. NYOJ之题目1058部分和问题
  2. 完全卸载oracle11g步骤
  3. maven+spark2.0.0最大连通分量
  4. Linux chroot 并使用之前系统设备节点
  5. FragmentTabHost+ViewPager实现底部按钮
  6. JSON对象如何转化为字符串?
  7. 用viewpager实现图片轮播
  8. CSS 之 @media
  9. mfc开发问题_v1
  10. C# - ADO.Net 调用存储过程
  11. MySQL在一台db服务器上面如何启动多个实例
  12. java第一个demo(简单登陆窗体)
  13. Mongodb 的ORM框架 Morphia之注解
  14. php Glob() 使用 查找文件:
  15. 吴恩达机器学习笔记2-代价函数I(cost function)
  16. 操作系统下cache的几个概念
  17. 【SDOI2017】天才黑客
  18. dubbo服务启动的方式
  19. 【hdu4285】 circuits
  20. CodeForces 1096E: The Top Scorer

热门文章

  1. 转发标签forward
  2. 说说AutoMapper那些事
  3. Java 基础:抽象类与接口
  4. Docker 常用命令,自用,持续更
  5. hadoop错误记录部分总结
  6. 根据数据文件自定义边界条件timeVaryingUniformFixedValue【转载】
  7. 深入理解JVM虚拟机13:再谈四种引用及GC实践
  8. 给定一个二叉搜索树(BST),找到树中第 K 小的节点
  9. #C++初学记录(acm试题#预处理)
  10. SELECT INTO (insert into) 和 INSERT INTO SELECT (insert into select) 两种表复制语句