TCP/IP编程之listen函数backlog参数详解(linux)

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/daiyudong2020/article/details/77727022


LISTEN(2)                                                Linux Programmer's Manual                                                LISTEN(2)

NAME
       listen - listen for connections on a socket

SYNOPSIS
       #include <sys/types.h>          /* See NOTES */
       #include <sys/socket.h>

       int listen(int sockfd, int backlog);


根据UNP的讲解,backlog参数是未完成连接队列+已完成连接队列的总大小,实际上,linux的情况不一样:

The behavior of the backlog argument on TCP sockets changed with Linux 2.2.  
Now it specifies the queue length for completely estab‐lished 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.

If the backlog argument is greater than the value in /proc/sys/net/core/somaxconn, 
then it is silently truncated to that value;  the default value in this file is 128. 
In kernels before 2.4.25, this limit was a hard coded value, SOMAXCONN, with the value 128.


注意点:
(1)linux中,未完成连接队列(三次握手),最大限制值由 /proc/sys/net/ipv4/tcp_max_syn_backlog决定。

(2)linux中,已完成连接队列(三次握手),最大限制值由/proc/sys/net/core/somaxconn决定,默认值是128。

(3)如果backlog参数大于/proc/sys/net/core/somaxconn,则发生截断,取/proc/sys/net/core/somaxconn


举例:nginx的backlog默认值是511,系统限制默认值是128,那么实际生效的就是128。


原文出自:http://blog.csdn.net/daiyudong2020/article/details/77727022


End;

猜你喜欢

转载自blog.csdn.net/daiyudong2020/article/details/77727022