Listen第二个参数的意义

理解 listen 函数的第二个参数 关于网络接口函数listen函数中第二个参数详解及其使用 阅读详情

Listen第二个参数的意义

      今天主要回顾下listen的第二个参数的意义。 话说现在现在都是用框架写业务代码。真的很少在去关注最基本的socket函数的意义了。该忘得都忘得差不多了。~~~  要慢慢捡起来。  主要是在看redis网络这块的时候它的第二个参数设置的是500多。  而且突然想到当初几年前腾讯电话面试问过我第二个参数是什么意思。当时我一股脑就说成connet的连接数量了。哈哈  2b.

照例 先上图,再解析

首先这个图是展示的TCP 三次握手。这里就不吸收三次握手了。我们主要是关注 两个队列

1:未完成队列:每个这样的SYN分节对应其中一项,已有某个客户端发出并到达服务器,而服务器正在等待完成相应的TCP三路握手过程。这些套接口处于SYN_RCVD

2:已完成队列:每个已经完成TCP三路握手过程的客户对应其中一项。 这些套接口处于ESTABLISHED

这里说下对着两个队列的理解

假设未完成队列设置为100,  有并发1000个请求过来。假如系统处理过慢。那么系统会做以下几件事

1) 因为未完成队列只有100个。先放100个请求过来处理三次握手。其他的请求直接拒绝。TCP会忽略该分节,也就是不送RST,这样客户端将重发SYN,期望在未完成队列中找到位置

2)每处理完一个三次握手动作。就放一个SYN请求过来。并站住未完成队列一个位置。除非三次握手完成(成功或者失败)、或者超时就把该请求连接移除未完成队列。如果系统性能好。这个动作会很快。

3)完成TCP三次握手的请求放到已完成队列里。

这个时候再去看 listen的第二个参数。

其实这里man listen的时候已经解释的很清楚了

   The backlog argument defines the maximum length to which the queue of pending connections for sockfd may grow.  If a connection request arrives when  the  queue  is full,  the client may receive an error with an indication of ECONNREFUSED or, if the underlying protocol supports retransmission, the request may be ignored so that a later reattempt at connection succeeds.

    第二个参数就是未完成队列的大小

 

但是继续man listen函数 看到如下解释

The  behavior  of  the  backlog  argument on TCP sockets changed with Linux 2.2.  Now it specifies the queue length for completely established sockets waiting to be accepted,  instead  of  the  number  of  incomplete  connection  requests.   The  maximum  length  of  the  queue  for  incomplete  sockets   can   be   set   using  /proc/sys/net/ipv4/tcp_max_syn_backlog.   When  syncookies are enabled there is no logical maximum length and this setting is ignored.  See tcp(7) for more information.

        在linux 2.2以后  listen的第二个参数。指的是在完成TCP三次握手后的队列。即在系统accept之前的队列。已经完成的队列。如果系统没有调用accpet把这个队列的数据拿出来。一旦这个队列满了。未连接队列的请求过不来。导致未连接队列里的请求会超时或者拒绝。如果系统调用了accpet队列接受请求数据。那么就会把接受到请求移除已完成队列。 这时候已完成队列又可以使用了。

最后 说了如果开启了syncookies  忽略listen的第二个参数。 

syncookie 主要是为了防止syn flood攻击。这里暂时先不说。以后再补充

总结

1,这里可以感受到  内核用了两个队列。 可以针对并发请求的时候。及时拒绝掉一部分处理不过来的请求。防止盲等待。类似有点雪崩处理的感觉。

2,listen的第二个参数。跟系统的链接数量没有任何关系。相当于设置一个瞬间能够处理的阈值。

3,一般情况下都会去开启 syncookie。所有其实现在已经可以不太关系listen的第二个值了



原文:http://www.cnblogs.com/ztteng/p/5147156.html

PLS-SEM(偏最小二乘路径建模)模型拟合优度指标 PLS-SEM(偏最小二乘路径建模)是一种基于方差的分析方法,侧重于预测导向,通过迭代优化路径系数和外部权重来最大化潜变量的解释方差(R²)。其评估指标分为外部测量模型和结构模型两部分:外部测量模型关注潜变量与显变量的关系,通过标准化载荷(>0.7)、信度指标(Cronbach’s α、复合信度CR>0.7)、聚合效度(AVE>0.5)和区分效度(Fornell-Larcker标准、HTMT<0.85)来评估模型的可靠性和有效性。结构模型则检验潜变量间的因果关系,通过路径系数(β值) 阅读详情

相关推荐

SQL手工注入及sqlmap注入(文章管理系统实例练习)

sql手工注入及sqlmap注入练习

weixin_53303754的博客 523

listen()函数的第二个参数详解

首先声明:我个人是在CentOS 7平台中运行的所有 一.   listen()函数简介 int listen(int sockfd, int backlog) 功能:listen函数会把sockfd的套接字标记为被动的监听listen状态,之后服务端与客户端通信的整个流程中sockfd只有listen和closed两种状态,第二个参数backlog代表等待队列的最大长度。(backlo...

qq_42434979的博客 9980

极验滑块验证码破解与研究(一):AST还原混淆JS

极验滑块验证码破解与研究(一):AST还原混淆JS声明一、环境安装1. node安装1.1. node下载1.2. 配置环境变量1.3. node安装检测1.4. pycharm配置node环境2. babel库安装2.1. babel库安装命令2.2. babel库安装检测二、AST还原混淆JS1. 模块导入2. AST还原流程3. 复制还原需要用到的js源码4. AST还原函数详解4.1. replace_unicode4.2. replace_unicode, replace_name_array,

帯泪的鱼的博客 1万+

关于listen()的的第二个参数backlog

listen()第二个参数的意义 listen()的定义 客户端与服务器的连接 listen的第二个参数 实践演示 1.listen的定义 在Linux下listen()的定义是这样的 #include <sys/type.h> #include <sys/socket.h> int listen(int fd , int backlog) listen()一般用在b...

qq_44049351的博客 1138

ADS124S08配置避坑指南:从SPI时序到寄存器设置,手把手教你调通24位ADC

本文详细解析了ADS124S08 24位ADC的SPI时序配置、寄存器设置及外围电路设计中的关键细节,帮助工程师避开常见陷阱。从SPI通信模式选择到DRDY引脚读取优化,再到基准电压启动时间调整,提供了实战验证的解决方案,确保高精度数据采集的稳定性。

weixin_29192365的博客 285

UNITY2022 Cardboard环境搭建

必须安装 Git,并且 git 可执行文件必须位于 PATH 环境变量中。考文档:https://developers.google.cn/cardboard/develop/unity/quickstart?转到 Assets/Samples/Google Cardboard//Hello Cardboard/Scenes/HelloCardboard 场景中。粘贴https://github.com/googlevr/cardboard-xr-plugin.git到文本输入字段中。

weixin_39510925的博客 1210

listen函数的第二个参数_详解socket中的backlog 参数

backlog: an accumulation of uncompleted work or matters needing to be dealt with. (累计未完成的待处理事件)socket中的backlog在socket编程中listen函数的第二个参数为backlog,用于服务器编程。listen 根据上述的状态图中的黑线,我们知道处于LISTEN状态的服务端socket收到SYN...

weixin_39890633的博客 873

ESP32—C3实现网页跳转

用户点击HTML页面中的按钮。浏览器根据按钮的href属性向服务器发送HTTP GET请求。服务器根据请求的URL调用相应的回调函数。服务器发送包含新页面HTML内容的HTTP响应。浏览器解析并显示新的HTML页面。这个过程对于用户来说是无缝的,看起来就像是直接从一个页面跳转到另一个页面。实际上,背后发生了HTTP请求和响应的过程。

qq_59527512的博客 1022

listen第二个参数的意义

今天主要回顾下listen的第二个参数的意义。 话说现在现在都是用框架写业务代码。真的很少在去关注最基本的socket函数的意义了。该忘得都忘得差不多了。~~~  要慢慢捡起来。  主要是在看redis网络这块的时候它的第二个参数设置的是500多。  而且突然想到当初几年前腾讯电话面试问过我第二个参数是什么意思。当时我一股脑就说成connet的连接数量了。哈哈  2b. 照例 先上图,再

好记性不如烂笔头 623

内部威胁论文阅读笔记(CMU-CERT专场)

在网上看了很多介绍该数据集的博客,一直有个疑问,这个数据集的标注在哪,本着先入为主的想法结合现有的资料对这个数据集的结构做了一下猜测(可能还是不严谨和正确)1.标注在哪2.什么是密集针模型3.场景文章连接内部人员由于可以绕过安全检测发起攻击,通常最有害的攻击被认为是内部人员发起。通过分析用户行为来检测内部威胁,主要分析一些类时间和活动进行特征选择。选择特征向量用于训练。采用cmu-certr4.2用于训练。提出的算法与。

Jerry的博客 2802

RK3568笔记二:部署手写数字识别模型

部署手写数字识别模型,使用手写数字识别(mnist)数据集训练了一个 LENET 的五层经典网络模型。Lenet是我们的深度学习入门的必学模型,是深度学习领域中的经典卷积神经网络(CNN)架构之一。过程分为:训练,导出ONNX,转化RKNN,测试。

1170

车规芯片烧录代工选型全解析:从方案、审核到量产爬坡的避坑指南

芯片烧录(固件写入)是嵌入式系统从开发走向量产的关键工艺环节——编程器通过特定时序和算法将固件镜像写入芯片存储单元,并通过校验机制确保数据完整。随着国产车规级MCU与SoC装车量持续攀升,车规芯片对烧录的需求不再是简单“灌数据”,而是叠加了ISO 26262功能安全、IATF 16949质量体系、Secure Boot密钥灌装、全链路数据可追溯等严苛要求。从离线烧录、在线烧录到全自动烧录系统,不同方案对应不同封装、产能与良率需求。本文从选型、代工厂审核到量产爬坡的实战视角,拆解车规芯片烧录代工的关键控制点与

weixin_33767813的博客 394

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

weixin_42412049的博客 2297

linux listen函数第2个参数,Listen第二个参数的意义

但是继续man listen函数 看到如下解释The behavior of the backlog argument on TCP sockets changed with Linux 2.2. Now it specifies the queue length for completely established sockets waiting to beaccepted, i...

weixin_35886741的博客 389

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

实例说明listen()函数第二个参数的意义与用法

关于listen函数问题,在网上查阅了部分资料,如下资料对自己理解很有帮助 我们先来看结果: Client: #include <sys/socket.h> #include <stdio.h> #include <string.h> #include <netinet/in.h> #include <stdlib.h> #...

积累点滴,保持自我 1038

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

全/半连接队列(Linux环境下listen函数的第二个参数的意义)

listen函数第二个参数的意义,什么是全连接队列?为什么需要全连接队列?

challenglistic的博客 1352

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

简单TCP网络程序---listen函数的第二个参数、accept()函数的返回值的意义

在上一篇发布的是简单UDP网络程序 链接://TODO

Misszhoudandan的博客 3349

【Linux 网络】网络基础(二)(传输层协议:UDP、TCP)

当出现丢包情况的时候,发送方是不会知道究竟是数据段发送的时候丢包了,还是确认应答的时候丢包,所以发送方只能进行超时重传。如果是第二种丢包情况,接收方就可能会收到一份同样的数据。因为重复的报文也是不可靠的一种,所以主机 B 需要进行去重(通过序号)。因为需要超时重传,所以数据发送出去后不会立即清除,而是保留一段时间,直到收到该数据的响应报文后,发送缓冲区中的这部分数据才可以被删除或覆盖。

Elena's Blog 2616
上一篇: sqlserver删除 日志文件
下一篇: 努力 奋斗
mincheat
博客等级 码龄17年 46粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值