redis启动时的epoll事件

initServer

1、epoll_create,创建epoll队列

aeCreateEventLoop==>aeApiCreate

    state->epfd = epoll_create(1024); /* 1024 is just a hint for the kernel */

2、epoll_ctl,添加epoll事件

2.1、listenToPort

    /* Open the TCP listening socket for the user commands. */
    if (server.port != 0 &&
        listenToPort(server.port,server.ipfd,&server.ipfd_count) == C_ERR)
        exit(1);

绑定redis服务端口,并用服务端的sockfd,作为

fds[*count] 的第0个成员。count默认=0

int listenToPort(int port, int *fds, int *count) {
###
            /* Bind IPv4 address. */
            fds[*count] = anetTcpServer(server.neterr,port,server.bindaddr[j],
                server.tcp_backlog);
}

此时,server.ipfd[0]=server_sock

2.2、epoll_ctl   添加服务端sock事件

/* Create an event handler for accepting new connections in TCP and Unix
     * domain sockets. */
    for (j = 0; j < server.ipfd_count; j++) {
        if (aeCreateFileEvent(server.el, server.ipfd[j], AE_READABLE,
            acceptTcpHandler,NULL) == AE_ERR)
            {
                serverPanic(
                    "Unrecoverable error creating server.ipfd file event.");
            }
    }

 if (epoll_ctl(state->epfd,op,fd,&ee) == -1) return -1;

这里的state->epfd,来自于epoll_create,fd来自server_sock

3、epoll_wait

    aeMain(server.el);

    retval = epoll_wait(state->epfd,state->events,eventLoop->setsize,
            tvp ? (tvp->tv_sec*1000 + tvp->tv_usec/1000) : -1);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值