listen的第二个参数


理解 listen 的第二个参数

Linux内核协议栈为一个tcp连接管理使用两个队列,分别是:
半连接队列:用来保存SYN_SENT和SYN_RECV两个状态的连接。也就是三次握手还没有完成,连接还没建立的连接。
全连接队列:用来保存保存ESTABLISHED状态的连接。三次握手已经完成的连接。

全连接队列存放三次握手成功的连接。如果当服务器不调用accept函数,没有将全连接队列的请求拿出来,当该队列满的时候,客户端的连接就无法再过来,而是存放在半连接队列中,所以当全连接满时,服务器会处于SYN_RECV状态。

注意:全队列的长度是listen的第二个参数+1

举个例子:全连接队列就像餐馆里的座位数目,处于全连接队列里的连接就像是正在用餐的客人,而一旦被accept,就相当于用餐结束,客人离开餐馆,座位数目+1。半连接队列像是在餐馆外面等待的人,当餐馆有座位时(全连接队列没满)就让排队的人进入餐馆坐着(把半连接队列里的连接放进全连接,当然他们的三次握手也随之完成,状态进入ESTABLISHED),座位数-1。
之所以要这样设计,是为了尽可能多地服务更多的客人,如果不设置半连接队列,座位满了,客人就直接走了,如果客人刚走就有空座位了,岂不是得不偿失?所以TCP为了尽可能多得利用资源,设计了半连接和全连接队列。当然排队的队列也不能太长,因为与其增加排队的长度,不如多加几张桌子(多创建几个进程/线程进行accept)。


使用代码验证

使用之前写的TCP代码,将listen的第二个参数改成1,意味着全连接队列最多有2个连接:
在这里插入图片描述

然后启动服务器,用四个客户端进行连接,发现有四个连接处于ESTABLISHED状态:
在这里插入图片描述

这是因为我们调用了accept,如果我们把accept代码注释掉,让服务器只listen不accept:
在这里插入图片描述

然后再用四个客户端连接服务器:
在这里插入图片描述

可以看到全连接队列有两个连接,半连接队列也有两个,如果此时第五个客户端也连接服务器,半连接队列就会+1:
在这里插入图片描述


从原码角度来看

在这里插入图片描述

为什么全队列的长度是listen的第二个参数+1

从上面的图可以看出来,内核在判定全连接队列为满时采用的是>而不是>=,我们listen的第二个参数为sk_max_ack_backlog表示全连接队列最大长度,只有当前全连接队列长度sk_ack_backlogsk_max_ack_backlog大时,才判定全连接队列已满。

在这里插入图片描述

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
400个插件,下面的详细列表: mxp/ColdFusion中的Include mxp/80多个国家的一个下拉菜单,在某些时候的确挺方便的 mxp/检查当前文件的兼容性和可能包含的错误,并会给出详细的检测报告 mxp/在代码编辑框中选择一段脚本代码,然后使用这个插件,可以把这些代码放到一个单独的js文件中 mxp/在Dreamweaver中快速的插入一个Fireworks做好的图片,不过好象只能做空白图 :( mxp/这个插件用来代替Dreamweaver File菜单下的New Form Template命令。作用是可以侦测出站点内的模板,这样就直接打开了,而不象以前还需要在对话框中选择 mxp/在代码编辑环境下,插入一个脚本函数,函数名和参数都可以自定义的 mxp/这个插件很有意思,让你的窗口从大变小,或者从小变大 mxp/用来更新Configuration-TagAttributeList.txt这个文件 mxp/插入中文空格 mxp/Jet制作的飘浮图片插件,没时间封装,Redidea友情封装 mxp/Chromeless Windows标题bug修改版 mxp/使窗口过一段时间后自动关闭 mxp/用来做电子商务的插件。不过只停留在表面的html语句和form的action,没有涉及后台程序 mxp/替换Dreamweaver自带的show-hide layer behavior,从而使更好的支持Netscape 6 mxp/用来代替Dreamweaver自带的Set Text of Layer behavior,从而使得在Netscape 6下兼容 mxp/打开一个新窗口,并让窗口在屏幕上居中 mxp/Chromeless Windows,比我做的X-window好。 mxp/可以联合Authorware, CourseBuilder extension for Dreamweaver ,UltraDev, Macromedia Flash Learning Extensions, and Director等等的一系列软件做一个教学站点 mxp/对当前文件生成一个备份文件,以便修改 mxp/在site窗口的文件上点一下右键就出现这个插件了。作用是把文件复制或者移动到某个文件夹 mxp/层的转换特效,2.0版 mxp/加入JSP中的Include mxp/用表单外部的事件来提交表单 mxp/用表单外部的事件来控制表单的行为,包括提交,清空等等 mxp/可以对文本框中的内容做多种限制,比如不包含空格、引号等等 mxp/在Dreamweaver的File菜单下加一个Print code命令,用来打印代码 mxp/Splash Window,也叫chromeless splash , 一种效果很不错的浏览器窗口 mxp/在代码编辑窗的点右键,可以快速跳转到特定的代码行 mxp/在site窗口中的本地文件夹选择一个文件点右键,就可以打开当前文件所在的目录,很方便的 mxp/在代码编辑框中点右键就可使用。该插件可以让插件编写者用一些Windows风格的对话框来和用户进行交互 mxp/创建一个JustSo风格的相册 mxp/插件开发者使用,用来Debug mxp/Dreamweaver中的Menu.xml是记录Dreamweaver菜单信息的文件,由于某些原因,经常容易损坏,此插件可以创建备份文件并恢复 mxp/打开一个Web对话框窗口,也是很特别的一种,没有最大和最小化按钮 mxp/使一个多行的表格行和行之间颜色交替,像斑马线一样。2.0版本 mxp/可以倒出-倒入站点信息,方便其他开发者 mxp/插入e-Vue MPEG-4格式的文件 mxp/Mycomputer.com提供的一套Banner交换系统,使用起来需要注册,比较麻烦 mxp/MyComputer.com提供的一套站点访问跟踪系统,也是需要注册,使用麻烦 mxp/在页面中加入一个SiteMiner.com搜索引擎的接口,MyComputer.com提供 mxp/在页面中加入一个MyComputer.com提供的留言本,需要注册,使用麻烦 mxp/计算代码的字符个数 mxp/一个比Dreamweaver自带的Jump menu更好的下拉导航菜单 mxp/对Dreamweaver目录下的FtpExtensionsMap.txt文件进行编辑。此文件定义了某类型的文件以二进制或者文本方式ftp mxp/自动将窗口最大化 mxp/由MyComputer.com提供的一套投票程序,需要注册,使用烦琐 mxp/用来在Dreamweaver环境下编辑安装目录下的Extensions.txt文件,此文件记录的文件扩展名和文件类型的关系 mxp/加入一个指向邮件地址的连接,并可以自定

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也要写bug、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值