linux listen监听队列长度,Linux中listen()系统调用的backlog参数分析

本文详细分析了Linux中listen()系统调用的backlog参数,指出它不仅规定了连接队列长度,也指定了半连接队列长度。内容涉及半连接队列上限的计算与存储,以及连接队列长度的设置。通过代码示例解释了如何调整半连接队列长度,并提到了sysctl_max_syn_backlog系统配置的重要性。
摘要由CSDN通过智能技术生成

这篇文章是对上一篇博客网络编程常用接口的内核实现----sys_listen()的补充(见 http://www.linuxidc.com/Linux/2013-02/79858.htm ),上篇文章中我说listen()系统调用的backlog参数既是连接队列的长度,也指定了半连接队列的长度(不能说等于),而不是《Unix网络编程》中讲到的是半连接队列和连接队列之和的上限,也就是说这个说法对Linux不适用。这篇文章中通过具体的代码来说明这个结论,并且会分析如果连接队列和半连接队列都满的话,内核会怎样处理。

首先来看半连接队列的上限是怎么计算和存储的。半连接队列长度的上限值存储在listen_sock结构的max_qlen_log成员中。如果找到监听套接字的sock实例,调用inet_csk()可以获取inet_connection_sock实例,inet_connection_sock结构是描述支持面向连接特性的描述块,其成员icsk_accept_queue是用来管理连接队列和半连接队列的结构,类型是request_sock_queue。listen_sock实例就存储在request_sock_queue结构的listen_opt成员中,它们之间的关系如下图所示(注:本来下面的图应该横着画,但是横着CSDN会显示不全):

a12dc873f9840bce800932173d27975e.png

半连接队列的长度上限在reqsk_queue_alloc()中计算并设置的,代码片段如下所示:

int reqsk_queue_alloc(struct request_sock_queue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值