VC中如何设置Socket的TCP/IP KeepAlive机制(MSDN)
说明:
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)相关推荐
- socket、tcp/ip、http三者之间的区别和原理
网络七层模型 OSI 模型(Open System Interconnection model)是计算机和网络在世界范围内实现互联的标准框架.它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的 ...
- linux 协议栈之socket,Linux TCP/IP 协议栈之 Socket 的实现分析(一)
内核版本:2.6.37 参考[作者:kendo的文章(基于内涵版本2.6.12)] 第一部份 Socket套接字的创建 socket 并不是 TCP/IP协议的一部份. 从广义上来讲,socket 是 ...
- socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少
常识一:文件句柄限制 在linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File ...
- 转载 Socket与TCP/IP的关系 转(非常好的一篇文章!)
要写网络程序就必须用 Socket ,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会 Socket 编程?一般来说,很多人都会说, Socket 编程基本就是 listen , accep ...
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP ...
- tcp retransmission 出现的原因_浅谈TCP的keepalive机制
相关背景: hbase集群大量regionserver节点进程挂掉,排查log发现每个节点上的有大量的和datanode建立连接失败的报错信息,进一步排查是大量的Too Many Open Files ...
- TCP之keepalive机制的应用场景
2019独角兽企业重金招聘Python工程师标准>>> 如果TCP连接被对方正常关闭,也就是说,对方是正确地调用了close或者shutdown的话,那么Recv或Send调用就能马 ...
- java tcp ip通信_Java中Socket实现TCP/IP协议的通信
TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的. Jav ...
- vc 网络编程(socket)TCP/UDP 介绍
在网上找了很多的资料,现将这些资料整合起来,详细介绍一下VC下的socket编程,并提供一个服务器客户端具体的实例.希望对您有所帮助 一.原理部分 在网络编程中最常用的方案便是Client/Serve ...
最新文章
- 第二讲 从图像到点云 笔记
- mysql中有主键和外键吗_谈谈mysql的主键和外键
- zstd安装_PHP: 安装 - Manual
- 计算机专业理科二本录取分数线,这7所211理科录取分数线较低,普通考生记得关注,2所有二本招生...
- 二叉树最大深度:给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
- 《计算机应用基础》在线考试,2018年自学考试《计算机应用基础》考试题及答案...
- python 图片 变清晰_python模糊图片过滤的方法
- LaTex - PPT 模板-3 (亲测可用)
- unity3D-下载安装指南
- Hexo 关闭文章评论
- 不同网络情况的安防摄像头如何通过手机进行直播?
- 随机生成游戏用户昵称(nodejs版本)(含机器人头像,金币等)
- python3 工作上一些正则表达式
- Js日期函数-Date方法
- LeetCode hot-100 简单and中等难度,41-50.
- 跨库查询——mysql
- 多值依赖与部分函数依赖 转
- 博士毕业论文英文参考文献换行_毕业论文注释及英文参考文献需翻成中文吗?...
- 罗斯蒙特248温度变送器248HANANONS
- ER模型详解-陈氏模型