SOCKET 服务器停止服务时清理连接操作

刚想到一个情况,正好是工作中遇到的。

当服务器停止时,正好有连接的请求正在被处理,而此时服务端需要等待该请求被正常的处理完,然后给客户端发送响应报文。

正常情况下,服务器停止的时候,是希望发送了响应报文之后立即就该关闭该连接(这样最理想)。

但是发现一个问题就是,当服务端发送响应报文后立即关闭连接,那么客户端是否能按正常的顺序先接收完报文然后才是SOCKET 的断开呢?

 

这个问题我把它放到一个QQ 群里面讨论了一下,大神给出的结果是:SOCKET 在关闭连接的时候,在默认情况下( linger 选项打开),SOCKET 会尝试将缓冲区中的数据先发送到客户端然后发起关闭操作。所以在这一点上,基本是可以保证客户端先读取到数据,然后再接收到关闭SOCKET 连接的FIN 。

 

同时我也写了代码尝试过,并未出现在数据没接收到的时候就将SOCKET 断开 的情况。这一测试是在公网啊里云服务器与本地主机上进行的,所以网络有一点延迟模拟的比较完善,不至于在本机因为网络太快而导致前后未乱顺的情况。

 

posted on 2016-05-13 11:05  独孤酷酷  阅读(1596)  评论(0编辑  收藏  举报