本文将介绍UNIX网络编程中listen
函数及其包裹函数。
函数简介
1 | #include<sys/socket.h> |
目前listen
函数仅为TCP
服务器调用,主要完成两个任务:
- 将
socket
函数创建的还未建立连接的主动套接字转换为被动(监听)套接字,使内核接受指向该套接字的连接。 - 使用第二个参数规定了内核为相应套接字排队的最大连接个数。
tips:
socket
函数创建的套接字被默认为一个主动套接字,即该套接字为将调用connect
函数发起连接的客户套接字。而listen
函数导致该套接字从CLOSED
状态转换为LISTEN
状态。
包裹函数(下载)
历史上总是将backlog
设为5,但已无法满足现在服务器的需求了,所以需要指定一个较大的backlog
才能满足繁忙的需求。一种方法是使用一个常值,可是每次增长都需要重新编译,比较麻烦;另一种方法是设定默认值,然后允许通过命令行或环境变量覆盖默认值:
1 | #include<stdlib.h> |
这样就可以通过设置环境变量LISTENQ
来动态配置backlog
的大小。
tips:
backlog
为0不代表就不会有客户连接到你的机器。如果不想让客户连接,请直接关闭该套接字。