![](https://i-blog.csdnimg.cn/blog_migrate/0c13ff399b301a0fc8fbec13a467773e.png)
一、Linux 4.19内核listen系统调用代码注释
/*
* 开始对一个 socket 进行监听。这个函数做一些准备工作以便 socket 可以开始监听,
* 如果操作成功,则将 socket 标记为准备好监听的状态。
*/
int __sys_listen(int fd, int backlog)
{
struct socket *sock; // 定义 socket 结构指针
int err, fput_needed; // 错误码变量和引用计数释放标志
int somaxconn; // 用于存储系统限制的最大监听队列长度
// 试图通过文件描述符 fd 查找对应的 socket 结构
sock = sockfd_lookup_light(fd, &err, &fput_needed);
if (sock) { // 如果找到了对应的 socket
// 获取系统配置的最大监听队列长度(SOMAXCONN 的值)
somaxconn = sock_net(sock->sk)->core.sysctl_somaxconn;
// 如果请求的 backlog 超过了系统设置的最大值,则强制降低至系统设置的最大值
if ((unsigned int)backlog > somaxconn)
backlog = somaxconn;
// 调用安全模块相关函数,对 socket 进行监听之前的安全检查
err = security_socket_liste