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

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

原因分析:

使用netstat  -nlpt 查看分析

发现服务器监听端口正常


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

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

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


解决办法:

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

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值