
您好很高兴回答您的问题:
使用ss -lntup 命令即可
使用netstat -lntup命令
很高兴回答你的问题 by oldboylidao996
listen的backlog参数指定的是已经三次握手完成,达到了established状态但是等待accept的队列的容量。当这个容量超过上限的时候服务器端便不处理客户端的三次握手了。这个队列的容量当然不是楼主所说的并发连接数。但是lisen的再后一道程序便是accept了。如果你想要的是在tcp并发连接数量超过上限的时候服务器不再处理了三次握手那么只有两种办法:
1.关闭listen的socket
2.自己修改tcp协议栈的实现,当然这个就比较麻烦了。
用iptables防火墙来限制tcp连接,
如下,限制用户的tcp连接数为50
iptables -I INPUT-p tcp -m connlimit --connlimit-above 50 -j REJECT
listen的第二个参数并不是用来限制程序的最大连接数的。而是TCP模块允许的已完成三次握手过程(TCP模块完成)但还没来得及被应用程序accept的最大链接数.
举例来说假说你的服务器很忙或干脆暂停了,这时如果有四个TCP客户端尝试TCP链接过来,而你listen的第二个参数为3,则底层TCP模块会依次完成前面3个客户端的握手过程,并把其放入一个缓存区中等待服务器应用程序的accept(此时这三个客户程序的connect会调用成功表示链接已建立)。对于第四个链客户端,TCP模块什么也不做,也不会返回icmp数据包。实际上第四个链接已被TCP模块丢弃。假如此时服务器还在暂停之中但客户端的connect已成功返回则客户端会认为可以向服务器发送数据了,这此数据会被服务器端的TCP模块缓存下来,待服务器程序从暂停中恢复过来时读取.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)