listen函数backlog参数

来源:互联网 发布:先锋编辑软件 编辑:程序博客网 时间:2024/06/05 05:39

函数原型:

    int listen(int sockfd,int backlog);

作用:
1. 将套接字从CLOSE状态转换到LISTEN状态
2.设置此套接字上排队的最大连接个数

backlog其实是一个连接队列,以下是backlog队列大小公式。
backlog队列总和 = 未完成三次握手队列 + 已经完成三次握手队列
注:
并不是指backlog的上限就是那么大。
listen()对应的内核实现为sys_listen()。

为了理解backlog参数,我们必须认识到内核为任何一个给定的监听套接口维护两个队列:

1、未完成连接队列(incomplete connection queue):服务器处于listen状态时收到客户端syn 报文(connect)时放入未完成队列中2、已完成连接队列(completed connection queue):三路握手的第二个状态即服务器syn+ ack响应client后,此时第三个状态ack报文到达前(客户端对服务器syn的ack)一直保留在未完成连接队列中,如果三路握手完成,该条目将从未完成连接队列搬到已完成连接队列尾部.

修改连接数:

    backlog参数设置既可以在linux内核参数设置(修改文件/etc/sysctl相关参数),也可以在socket系统调用listen函数时设置(第二个参数),这二者区别是,前者为全局性的,影响所有socket,后者为局部性的,影响当前socket。
0 0
原创粉丝点击