说明:
A TCP keep-alive packet is simply an ACK with the sequence number set to one less than the current sequence number for the connection. A host receiving one of these ACKs will respond with an ACK for the current sequence number.
翻译:
一个TCP keep-alive 包是一个简单的ACK,该ACK包内容为 一个比当前连接sequence number 小于一的包。主机接受到这些ACKs会返回一个包含当前sequence number 的ACK包。

说明:
Keep-alives can be used to verify that the computer at the remote end of a connection is still available.
翻译:
Keep-alives一般被用来验证远端连接是否有效。

说明:
TCP keep-alives can be sent once every KeepAliveTime (defaults to 7,200,000 milliseconds or 2 hours), if no other data or higher-level keep-alives have been carried over the TCP connection.
翻译:
如果该连接上没有其他数据被传输,或者更高level 的 keep-alives被传送,keep-alives 在每个KeepAliveTime被发送。(默认是 7,200,000 milliseconds ,也就是2个小时)。

说明:
If there is no response to a keep-alive, it is repeated once every KeepAliveInterval seconds. KeepAliveInterval defaults to 1 second. NetBT connections, such as those used by many parts of the Microsoft networking functionality, send NetBIOS keep-alives more frequently, so usually no TCP keep-alives will be sent on a NetBIOS connection.
原翻译:
如果对于keep-alive连接端没有回应,他继续将在每KeepAliveInterval秒发送,KeepAliveInterval默认为1秒,在NETBT连接,比如Microsoft networking的很多功能性的部分,发送NETBios keep-alives频率高,所以,在一个NetBios连接中,TCP keep-alives不被发送。

此处感谢 网友of123 修正翻译(给大家造成的误解博主向所有的读者表示歉意):

引用

如果没有收到 keep-alive 应答,keep-alive 将在每 KeepAliveInterval 秒重发一次。KeepAliveInterval 默认为1秒。如 Microsoft 网络功能中很多部分中采用的 NETBT 连接,更常见的是发送 NETBios keep-alives,所以,在 NetBios 连接中通常不发送TCP keep-alives。

说明:
TCP keep-alives are disabled by default, but Windows Sockets applications can use the SetSockOpt function to enable them.
翻译:
TCP保持连接默认被禁用,但是微软Sockets应用程序可以使用SetSockOpt函数去启用他们。

几点比较重要的说明:

1:TCP 的默认时效是2个小时。
2:如果发送Keep-alive没有回应,将会在KeepAliveInterval再次发送,不过这里是否需要系统来进行判断,并断开连接?

设置keepalive代码如下:
tcp_keepalive live,liveout; live.keepaliveinterval=500; live.keepalivetime=3000; //勘误 1分钟是 60000 以此类推 live.onoff=TRUE; int iRet = setsockopt(Socket,SOL_SOCKET,SO_KEEPALIVE,(char *)Opt,sizeof(int)); if(iRet == 0){ DWORD dw; if(WSAIoctl(Socket,SIO_KEEPALIVE_VALS,&live,sizeof(live),&liveout,sizeof(liveout),&dw,NULL,NULL)== SOCKET_ERROR){ //Delete Client return; } }

tcp_keepalive live,liveout; live.keepaliveinterval=500; live.keepalivetime=3000; //勘误 1分钟是 60000 以此类推 live.onoff=TRUE; int iRet = setsockopt(Socket,SOL_SOCKET,SO_KEEPALIVE,(char *)Opt,sizeof(int)); if(iRet == 0){ DWORD dw; if(WSAIoctl(Socket,SIO_KEEPALIVE_VALS,&live,sizeof(live),&liveout,sizeof(liveout),&dw,NULL,NULL)== SOCKET_ERROR){ //Delete Client return; } }
判断掉线并处理:

BOOL bReturn = GetQueuedCompletionStatus( g_hIOCompletionPort, &dwBytesTransfered, (LPDWORD)&lpContext, &pOverlapped, INFINITE); if (bReturn== false){ //Client has gone delete client and close socket }

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/henhen2002/archive/2009/07/31/4395961.aspx

VC中如何设置Socket的TCP/IP KeepAlive机制(MSDN)相关推荐

  1. socket、tcp/ip、http三者之间的区别和原理

    网络七层模型 OSI 模型(Open System Interconnection model)是计算机和网络在世界范围内实现互联的标准框架.它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的 ...

  2. linux 协议栈之socket,Linux TCP/IP 协议栈之 Socket 的实现分析(一)

    内核版本:2.6.37 参考[作者:kendo的文章(基于内涵版本2.6.12)] 第一部份 Socket套接字的创建 socket 并不是 TCP/IP协议的一部份. 从广义上来讲,socket 是 ...

  3. socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少

    常识一:文件句柄限制 在linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File ...

  4. 转载 Socket与TCP/IP的关系 转(非常好的一篇文章!)

    要写网络程序就必须用 Socket ,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会 Socket 编程?一般来说,很多人都会说, Socket 编程基本就是 listen , accep ...

  5. 聊聊Socket、TCP/IP、HTTP、FTP及网络编程

    1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP ...

  6. tcp retransmission 出现的原因_浅谈TCP的keepalive机制

    相关背景: hbase集群大量regionserver节点进程挂掉,排查log发现每个节点上的有大量的和datanode建立连接失败的报错信息,进一步排查是大量的Too Many Open Files ...

  7. TCP之keepalive机制的应用场景

    2019独角兽企业重金招聘Python工程师标准>>> 如果TCP连接被对方正常关闭,也就是说,对方是正确地调用了close或者shutdown的话,那么Recv或Send调用就能马 ...

  8. java tcp ip通信_Java中Socket实现TCP/IP协议的通信

    TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的. Jav ...

  9. vc 网络编程(socket)TCP/UDP 介绍

    在网上找了很多的资料,现将这些资料整合起来,详细介绍一下VC下的socket编程,并提供一个服务器客户端具体的实例.希望对您有所帮助 一.原理部分 在网络编程中最常用的方案便是Client/Serve ...

最新文章

  1. 第二讲 从图像到点云 笔记
  2. mysql中有主键和外键吗_谈谈mysql的主键和外键
  3. zstd安装_PHP: 安装 - Manual
  4. 计算机专业理科二本录取分数线,这7所211理科录取分数线较低,普通考生记得关注,2所有二本招生...
  5. 二叉树最大深度:给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
  6. 《计算机应用基础》在线考试,2018年自学考试《计算机应用基础》考试题及答案...
  7. python 图片 变清晰_python模糊图片过滤的方法
  8. LaTex - PPT 模板-3 (亲测可用)
  9. unity3D-下载安装指南
  10. Hexo 关闭文章评论
  11. 不同网络情况的安防摄像头如何通过手机进行直播?
  12. 随机生成游戏用户昵称(nodejs版本)(含机器人头像,金币等)
  13. python3 工作上一些正则表达式
  14. Js日期函数-Date方法
  15. LeetCode hot-100 简单and中等难度,41-50.
  16. 跨库查询——mysql
  17. 多值依赖与部分函数依赖 转
  18. 博士毕业论文英文参考文献换行_毕业论文注释及英文参考文献需翻成中文吗?...
  19. 罗斯蒙特248温度变送器248HANANONS
  20. ER模型详解-陈氏模型

热门文章

  1. vue中watch监听路由传来的参数变化
  2. 洛谷——P1597 语句解析(两种解法)
  3. 操作属性之修改样式属性
  4. 快速生成CSS样式语法(HTML、CSS)
  5. 边框的复合写法(HTML、CSS)
  6. C# visionpro搜索区域拖动改变事件
  7. Open3d之彩色点云配准
  8. C# 根据年月日计算星期几
  9. LAMP架构(八)限定某个目录禁止解析、 限制user_agent、php相关配置
  10. tempdb相关文章