【C语言】Linux 内核listen系统调用代码

189 篇文章 0 订阅 ¥19.90 ¥99.00
67 篇文章 0 订阅
本文详细解读了Linux4.19内核中listen系统调用的C函数实现,涉及socket查找、backlog处理、安全检查及syscall接口。重点讲解了如何设置socket监听状态并确保安全性。
摘要由CSDN通过智能技术生成

一、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
  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

109702008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值