Swoole源码学习记录(十四)——Server模块详解(下)

本文详细分析了Swoole 1.7.6-stable版本中的swServer相关函数,包括swServer_addListener、swServer_listen、swServer_addTimer、swServer_tcp_send和swServer_reload,以及相关的结构体swPackage、swPackage_task和swPackage_response。这些函数涉及服务器的监听、定时器管理、数据发送和进程重启操作。同时,结构体分析揭示了Swoole如何处理大任务包和响应数据。
摘要由CSDN通过智能技术生成

swoole版本:1.7.6-stable

上一章已经分析了如何启动swServer的相关函数。本章将继续分析swServer的相关函数,


1.swServer函数分析

swServer_addListener

该函数用于在swServer中添加一个需要监听的host及port。函数原型如下:

// Server.h 438h
int swServer_addListener(swServer *serv, int type, char *host,int port);
参数 说明
swServer *serv swServer对象
int type 创建的socket类型,见枚举swSocket_type
char* host 监听地址
int port 监听端口

函数核心源码:

    // Server.c 900~943h
    swListenList_node *listen_host = SwooleG.memory_pool->alloc(SwooleG.memory_pool, sizeof(swListenList_node));

    listen_host->type = type;
    listen_host->port = port;
    listen_host->sock = 0;
    listen_host->ssl = 0;

    bzero(listen_host->host, SW_HOST_MAXSIZE);
    strncpy(listen_host->host, host, SW_HOST_MAXSIZE);
    LL_APPEND(serv->listen_list, listen_host);

    //UDP需要提前创建好
    if (type == SW_SOCK_UDP || type == SW_SOCK_UDP6 || type == SW_SOCK_UNIX_DGRAM)
    {
   
        int sock = swSocket_listen(type, listen_host->host, port, serv->backlog);
        if (sock < 0)
        {
   
            return SW_ERR;
        }
        //设置UDP缓存区尺寸,高并发UDP服务器必须设置
        int bufsize = serv->udp_sock_buffer_size;
        setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &bufsize, sizeof(bufsize));
        setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &bufsize, sizeof(bufsize));

        listen_host->sock = sock;
        serv->have_udp_sock = 1;
    }
    else
    {
   
        if (type & SW_SOCK_SSL)
        {
   
            type = type & (~SW_SOCK_SSL);
            listen_host->type 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值