ngx_enable_accept_events
1 定义ngx_enable_accept_events 函数 定义在 ./nginx-1.24.0/src/event/ngx_event_accept.cngx_int_tngx_enable_accept_events(ngx_cycle_t*cycle){ngx_uint_ti;ngx_listening_t*ls;ngx_connection_t*c;lscycle-listening.elts;for(i0;icycle-listening.nelts;i){cls[i].connection;if(cNULL||c-read-active){continue;}if(ngx_add_event(c-read,NGX_READ_EVENT,0)NGX_ERROR){returnNGX_ERROR;}}returnNGX_OK;}ngx_enable_accept_events 函数的作用是 恢复 worker 进程对所有监听端口的 accept 能力。 它遍历当前配置的每一个监听套接字 若该套接字上的读事件尚未激活 则将其重新加入事件驱动模块如 epoll 从而让进程可以再次接受新的客户端连接。2 详解1 函数签名ngx_int_tngx_enable_accept_events(ngx_cycle_t*cycle)返回值 NGX_OK 0操作成功 NGX_ERROR -1操作失败参数 ngx_cycle_t *cycle 指向当前运行周期上下文环境2 逻辑流程1 局部变量 2 遍历所有监听端口 3 返回成功1 局部变量{ngx_uint_ti;ngx_listening_t*ls;ngx_connection_t*c;2 遍历所有监听端口lscycle-listening.elts;for(i0;icycle-listening.nelts;i){cls[i].connection;if(cNULL||c-read-active){continue;}if(ngx_add_event(c-read,NGX_READ_EVENT,0)NGX_ERROR){returnNGX_ERROR;}}#1 取当前监听端口对应的连接对象 判断是否需要重新激活事件。 条件有两个 c NULL安全防护连接对象不存在时不能操作事件直接跳过。 c-read-active c-read 代表监听套接字的读事件 其中的 active 标志表示该事件是否已经被添加进内核事件机制。 若 active 已为 1说明 accept 事件正处于监听状态无需重复添加。 这两个条件均满足时执行 continue跳过当前监听端口。#2 将读事件添加到事件驱动模块。 ngx_add_event 是事件抽象层函数其参数 c-read要添加的事件对象读事件。 NGX_READ_EVENT表示添加的是读事件区别于写事件或定时器。 0附加标志这里为 0 表示不设置特殊选项 事件添加失败时函数直接返回 NGX_ERROR 由调用方处理3 返回成功returnNGX_OK;}