backlog: an accumulation of uncompleted work or matters needing to be dealt with. (累计未完成的待处理事件)

socket中的backlog

在socket编程中listen函数的第二个参数为backlog,用于服务器编程。

listen(sock, backlog);

根据上述的状态图中的黑线,我们知道处于LISTEN状态的服务端socket收到SYN,建立一个新的状态为SYN_REVD的连接。SYN_REVD是一种半连接状态,而当收到客户端的ACK时,则进入ESTABLISHED状态。 由于三次握手的原因,连接的发起过程中,服务器的连接状态要经过SYN_REVD和ESTABLISHED两个状态。如何保存这两种状态的连接,不同系统有不同的实现。

在FressBSD中backlog就是描述状态为SYN_REVD和ESTABLISHED的所有连接最大数量。

而Linux系统中,则使用两个队列syn queue, accept queue分别存储状态为SYN_REVD和ESTABLISHED的连接,并且在linux2.2及以后,backlog表示accept queue的大小,而syn queue大小由 /proc/sys/net/ipv4/tcp_max_syn_backlog配置。

最后通过系统调用 accept 去从accept queue中获取建立完成的连接。 在开发服务端程序时,我们可以根据CPU性能和处理的复杂程度选择backlog来控制accept queue的大小。而syn queue更多时候取决于网络的流量。例如网络流量较大,但是处理较快可以减小syn queue。而流量较小时可以增大syn queue以接受更多的连接。

内核参数somaxconn

全称:socket max connections 位置:/proc/sys/net/core/somaxconn 这是系统层面对于backlog的控制,实际上accept queue的大小 = min(somaxconn, backlog)。因此在listen这个系统调用层面,backlog最终还是受限于somaxconn。

查看队列

ss -l

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port

tcp LISTEN 0 128 [::]:ssh [::]:*

在LISTEN状态下 Recv-Q 表示当前accept queue中的已连接数。Send-Q 表示总大小。

参考

backlog配置_详解socket中的backlog 参数相关推荐

  1. python scatter参数详解_Python 中 scatter 函数参数及用法详解

    Python 中 scatter 函数参数及用法详解 Python 中 scatter 函数参数及用法详解 这里有新鲜出炉的 Python 教程, 程序狗速度看过来! Python 编程语言 Pyth ...

  2. python socket自动重连_详解python3中socket套接字的编码问题解决

    一.TCP 1.tcp服务器创建 #创建服务器 from socket import * from time import ctime #导入ctime HOST = '' #任意主机 PORT = ...

  3. python中heapq的库是什么_详解Python中heapq模块的用法

    详解Python中heapq模块的用法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...

  4. python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发

    strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...

  5. python中break怎么用_详解Python中break语句的用法

    详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...

  6. python操作目录_详解python中的文件与目录操作

    详解python中的文件与目录操作 一 获得当前路径 1.代码1 >>>import os >>>print('Current directory is ',os. ...

  7. python3中unicode怎么写_详解python3中ascii与Unicode使用

    这篇文章主要为大家详解python3中ascii与Unicode使用的相关资料,需要的朋友可以参考下# Auther: Aaron Fan ''' ASCII:不支持中文,1个英文占1个字节 Unic ...

  8. python中list[1啥意思_详解Python中list[::-1]的几种用法

    本文主要介绍了Python中list[::-1]的几种用法,分享给大家,具体如下: s = "abcde" list的[]中有三个参数,用冒号分割 list[param1:para ...

  9. java 死锁 内存消耗_详解Java中synchronized关键字的死锁和内存占用问题

    先看一段synchronized 的详解: synchronized 是 java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并 ...

最新文章

  1. 在ASP.NET页面中实现数据柱状图
  2. 计算机无法屏幕亮度,电脑屏幕亮度无法调节怎么办
  3. DisplayContent、StackBox、TaskStack笔记
  4. 实例手册_独家数据 | 1820Fall 香港研究生商科类14个热门专业 1400+申请实例汇总...
  5. python 编辑数学公式_Jupyter快速编辑高大上数学公式 泰勒展开式
  6. 的ui在vs中显示没有成员_在电脑桌面使用敬业签团队便签怎么设置新增内容在上面显示?...
  7. 推荐5大开源工具,用于开发Kubernetes项目
  8. MyEclipse取消验证Js的两种方法
  9. 简单的Python小游戏制作
  10. java报错stderr_struts2 文件上传路径错误 ERROR [STDERR] java.io.FileNotFoundException:
  11. AdventNet Agent Toolkit C Edition6 AGENT
  12. 【后台模板】免费开源好看的后台模板
  13. Axure使用教程(三)、母版、Chart图表元件库
  14. 猫、路由器和交换机的区别和联系
  15. 在VC6.0下设置Unicode编译环境
  16. WINVNC源码阅读(七)
  17. php模拟IP请求,如何在php中利用curl对ip进行模拟
  18. java事件溯源_领域事件与事件溯源 - 解道Jdon
  19. FRED应用: LED混合准直透镜模拟
  20. 利用js关闭淘宝二维码?

热门文章

  1. 【Dev-c++】C语言数据结构课程设计——基于图的航班线路设计系统
  2. 计蒜客T1182 输出二进制补码(python3.6)
  3. 病狗问题 -- 假设法求解
  4. Java语言strcmp函数用法_蓝桥杯 算法提高 11-1实现strcmp函数 (JAVA方法)
  5. 优思学院|六西格玛的意义是什么?
  6. 黑苹果0000——安装后的不足
  7. 在jupyter中使用pypy
  8. MAC层与llc层的区别
  9. HTTP-8种请求类型
  10. android rdp服务器,[Android][FreeRDP与Window远程连接]