利用asio实现了一个服务器,多个客户端连接,并异常断开连接,发现后面再也连接不上服务器了,不能建立新连接了。原因分析

来源:互联网 发布:win7电脑打不开软件 编辑:程序博客网 时间:2024/06/05 23:53

最近利用Boost::asio实现了一个服务器,测试过程中发现大量客户端连接服务器,然后客户端异常断开之后,已经连接的客户端能正常工作,但是却不能建立新的客户端连接了。

原因分析:

使用netstat  -nlpt 查看分析

发现服务器监听端口正常


netstat -ap查看已经建立的连接数量

发现该服务器存在大量的close_waiting和last_ack的状态的半连接,甚至已经达到了进程限制的最大连接数(默认使用的1024个),

发现应该是由于半连接占用大量的连接资源,从而引起资源不足导致的连接失败。


解决办法:

在调用socket.close()方法之前,先调用acceptor.shutdown()方法主动关闭这个半连接。

保证服务器一定会释放连接。


阅读全文
0 0