美文网首页
listen 函数中参数 backlog

listen 函数中参数 backlog

作者: taj3991 | 来源:发表于2019-12-30 18:11 被阅读0次

我们该如何理解 listen 函数中的参数 backlog?如果 backlog 表示的是未完成连接队列的大小,那么已完成连接的队列的大小有限制吗?如果都是已经建立连接的状态,那么并发取决于已完成连接的队列的大小吗?

backlog 的值含义从来就没有被严格定义过。原先 Linux 实现中,backlog 参数定义了该套接字对应的未完成连接队列的最大长度 (pending connections)。如果一个连接到达时,该队列已满,客户端将会接收一个 ECONNREFUSED 的错误信息,如果支持重传,该请求可能会被忽略,之后会进行一次重传。

从 Linux 2.2 开始,backlog 的参数内核有了新的语义,它现在定义的是已完成连接队列的最大长度,表示的是已建立的连接(established connection),正在等待被接收(accept 调用返回),而不是原先的未完成队列的最大长度。现在,未完成队列的最大长度值可以通过 /proc/sys/net/ipv4/tcp_max_syn_backlog 完成修改,默认值为 128。

至于已完成连接队列,如果声明的 backlog 参数比 /proc/sys/net/core/somaxconn 的参数要大,那么就会使用我们声明的那个值。实际上,这个默认的值为 128。注意在 Linux 2.4.25 之前,这个值是不可以修改的一个固定值,大小也是 128。

设计良好的程序,在 128 固定值的情况下也是可以支持成千上万的并发连接的,这取决于 I/O 分发的效率,以及多线程程序的设计。在后面的性能篇里,我们的目标就是设计这样的程序。

原文

https://time.geekbang.org/column/article/135735

相关文章

  • listen 函数中参数 backlog

    我们该如何理解 listen 函数中的参数 backlog?如果 backlog 表示的是未完成连接队列的大小,那...

  • Socket TCP相关

    TCP 连接3次握手,断开连接4次握手图示 tcp/ip协议listen函数中backlog参数的含义 1、cli...

  • TCPIP listen函数中的backlog

    含义 To understand the backlog argument, we must realize th...

  • tcp/ip协议listen函数中backlog参数的含义

    listen函数的定义如下所示: 返回值:若成功则返回文件(套接字)描述符,若出错则返回-1 int listen...

  • 高并发 linux 系统优化

    内存参数 我们清楚的看到backlog 并不是按照你调用listen的所设置的backlog大小,实际上取的是ba...

  • Nginx [emerg] listen() to 0.0.0.

    Nginx [emerg] listen() to 0.0.0.0:80, backlog 511 failed ...

  • listen()的backlog

    该值通常为5 该值为5时依然很小,该值可以通过proc文件系统进行调整 该值表示已完成连接队列和半连接队列的总和 ...

  • TCP Listen backlog

    水平有限,如有纰漏,敬请指正! TCP服务 创建TCP服务的四个基本步骤: socket – 创建socket套接...

  • TCP协议中的backlog参数

    backlog参数的含义 TCP建立连接是要进行三次握手,但是否完成三次握手后,服务器就处理(accept)呢? ...

  • 理解tcp backlog参数

    TCP建立连接是要进行三次握手,但是否完成三次握手后,服务器就处理(accept)呢? backlog其实是一个连...

网友评论

      本文标题:listen 函数中参数 backlog

      本文链接:https://www.haomeiwen.com/subject/ptumoctx.html