服务器关闭连接

试验一

试验过程:

  1.Server仅投递唯一一个AcceptEx接收请求。

  2.Client连接。

  3.Server于连接完成回调中以Client Socket作为线程参数创建子线程,线程函数是Func。

  4.Func:

    将调用closesocket(s)关闭连接,在这个过程中Client无退出无closesocket(s)。

    Func关闭连接前

    

    关闭后,Func退出前

    

    Func退出后

    

小结:

  前提:无数据传输,无待决IO,Client自始至终无退出无closesocket(s)

  操作:Server调用closesocket(s)关闭连接

  结果:符合四步握手

试验二

试验过程:

  与试验一相同,不同点:

  在Server关闭连接前,与Client有数据往来。

结果:

  与试验一相同

小结:

  前提:有数据传输,无待决IO,Client自始至终无退出无closesocket(s)

  操作:Server调用closesocket(s)关闭连接

  结果:符合四步握手

试验三

  前提:Server和Client连接正常,Server上存在待决IO(WSARecv)  

  操作:Server某个线程调用closesocket(s)关闭连接

  结果:

    待决IO立即返回

    

    TCP连接状态(在Client未退出未关闭连接的情况下,TCP连接被粗暴关闭,直接跳过四步握手)

    

综上所述:

  前提:Client未退出未关闭连接

  操作:Server中某线程调用closesocket(s)关闭连接

  结果:

    若Server于Client Socket无待决IO(WSARecv),TCP连接儒雅关闭,呈Server—>Client单向关闭,符合四步分手;

    若Server于Client Socket有待决IO(WSARecv),待决IO即刻以bRet = 0, dwNumTransfer = 0, ErrorCode = 1236返回。与此    同时TCP连接跳过四步分手被暴力强关。

  

时间: 2024-10-08 11:37:11

服务器关闭连接的相关文章

COMET 异步通知服务器关闭数据连接实现思路

在小编络络 COMET实践笔记一文中注意事项中有这么一段话 使用长连接时, 存在一个很常见的场景:客户端需要关闭页 面,而服务器端还处在读取数据的阻塞状态,客户端需要及时通知服务器端关闭数据连接.服务器在收到关闭请求后首先要从读取数据的阻塞状态唤醒,然后释放为 这个客户端分配的资源,再关闭连接.所以在设计上,我们需要使客户端的控制请求和数据请求使用不同的 HTTP 连接,才能使控制请求不会被阻塞.在实现上,如果是基于 iframe 流方式的长连接,客户端页面需要使用两个 iframe,一个是控制

outlook2010怎么老提示IMAP服务器已关闭连接啊

  最近在Outlook中使用 网易 163邮件的IMAP功能时,发现接收邮件的速度非常慢,才几封邮件就花了至少15分钟才停止了同步邮件服务器的过程,然后提示一个对话框:"IMAP 服务器已关闭连接.如果连接处于空闲状态的时间过长,则会发生此现象."如下图所示.此现象时有时无! 故障图 此现象多数为网络延迟或者邮件提供商方面的问题,可以通过设置"Internet 电子邮件设置"-"服务器超时"修改成10分钟.可以避免出现此类情况.  

【HTTP】如何正常关闭连接

参考:<HTTP权威指南> 所有HTTP客户端.服务器或者代理都可以任意时刻关闭一条TCP传输连接.但是服务器永远无法确定它关闭"空闲"连接的那一刻,在线路那一头的客户端有没有数据要发送. 每条HTTP响应都应该有精确的Content-Length首部,用来描述响应主体的尺寸.如果老的HTTP服务器省略了Content-Length或者包含错误的长度指示,这样就要依赖服务器发出连接关闭来说明数据的真实末尾. 如果一个事务,不管是执行一次还是很多次,得到的结果都相同,这个事务

TCP三次握手(建立连接)/四次挥手(关闭连接)

相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.因此在这里详细解释一下这两个过程. TCP数据包格式 顺序号( 32 位):用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号.如果将字节流看作在两个应用程序间的单向流动,则TCP用顺序号对每个字节进行计数.序号是32bit的无

web服务器长连接

web服务器都提供长连接的方式,所谓长连接就是客户端一次请求完后,不关闭连接,保持一段时间的连接,下次此客户端再次请求时,不用创建新连接,复用所保持的连接即可.从理论上,长连接可以免去大量建立和关闭连接的资源消耗,但同时也有大量连接被占用的代价.因此可以初步判断长连接比短连接能带来更高的TPS,更低的CPU消耗,更少的IO,更高的内存占用,下面通过实战来验证. 服务器环境和测试工具可以见工具和环境准备篇 本次web服务器选用apache prefork模式,apache长短连接的选择可以配置ht

SQL Server 2008 报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误

今天SqlServer 2008连接数据库时报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误.在连接到 SQL Server 2008 时,在默认的设置下 SQL Server 不允许远程连接可能会导致此失败. (provider: 命名管道提供程序, error: 0 - 管道的另一端上无任何进程. 刚开始以为是远程数据库的问题,试了一下,同事的机器能连上.说明是我本机问题了,然后连接本地数据库,也报同样的错误. 参考 http://friendship517.blog.163.c

boost::asio 连接管理11 如何关闭连接

在实际产品运行中,对连接管理有了更新的认识,这里分享一下. shared_ptr管理连接对象的生命周期 shared_ptr的引用计数器决定了连接对象的生命周期.这里我说的连接对象就是在我的前文:http://blog.csdn.net/csfreebird/article/details/8522620 中的Client对象: [cpp] view plaincopyprint? #include "core/connection.h" #include <vector>

关于TCP主动关闭连接中的wait_timeout

首先我们先来回顾一下tcp关闭连接的过程: 假设A和B连接状态为EST,A需要主动关闭: A发送FIN给B,并将状态更改为FIN_WAIT1, B接收到FIN将状态更改为CLOSE_WAIT,并回复ACK和FIN A收到ACK后将状态更改为FIN_WAIT2,收到FIN后,更改状态为WAIT_TIMEOUT并给B返回ACK B收到ACK后,将关闭自己的链接CLOSE. 问题就在此时,A将处于WAIT_TIMEOUT状态长达2MSL时常(RFC793定义了MSL为2分钟,Linux设置成了30s)

解决Linux服务器 FIN_WAIT2 连接过多的问题

在HTTP应用中,存在一个问题,SERVER由于某种原因关闭连接,如KEEPALIVE的超时,这样,作为主动关闭的SERVER一方就会进入 FIN_WAIT2状态,但TCP/IP协议栈有个问题,FIN_WAIT2状态是没有超时的(不象TIME_WAIT状态),所以如果CLIENT不关闭,这个FIN_WAIT_2状态将保持到系统重新启动,越来越多的FIN_WAIT_2状态会致使内核crash. 解决办法:修改/etc/sysctl.conf 文件: net.ipv4.tcp_syncookies