NGX --- ACCEPT事件处理

本文深入探讨了NGINX中ACCEPT事件的处理流程,从ngx_process_events_and_timers函数开始,讲解了如何处理ACCEPT事件,包括ngx_event_process_posted函数的使用以及ngx_event_accept处理函数的注册。文中提到了事件结构ngx_event_s,特别是accept字段和handler钩子函数,指出ngx_event_process_init函数在初始化阶段为ACCEPT事件分配资源并设置处理函数。
摘要由CSDN通过智能技术生成
ngx_event_accept



void
ngx_process_events_and_timers(ngx_cycle_t *cycle)
{
    ngx_uint_t  flags;
    ngx_msec_t  timer, delta;
	......


    delta = ngx_current_msec;
    
    // 处理事件ngx_epoll_process_events
    (void) ngx_process_events(cycle, timer, flags);

    delta = ngx_current_msec - delta;

    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                   "timer delta: %M", delta);
    
    // 这个是ACCEPT 事件队列指针
    if (ngx_posted_accept_events) {
        ngx_event_process_posted(cycle, &ngx_posted_accept_events); //--------->此处处理ACCEPT事件
    }

	......
}
// 事件处理函数
void
ngx_event_process_posted(ngx_cycle_t *cycle,
    ngx_thread_volatile ngx_event_t **posted)
{
    ngx_event_t  *ev;

    for ( ;; ) {

        ev = (ngx_event_t *) *posted;

        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                      "posted event %p", ev);

        if (ev == NULL) {
            // 处理完事件后退出循环
            return;
        }
		// 从ngx_posted_accept_events 事件队列上取下事件
        ngx_delete_posted_event(ev);
		
		// 调用事件处理函数处理事件,这里是调用ngx_event_accept处理ACCEPT事件
        ev->handler(ev);
    }
}

// 暂时不看ngx_event_accept的处理流程,先看看事件的结构


struct ngx_event_s {
    void            *data;

    unsigned         write:1;       // 写事件

    unsigned         accept:1;      // accept 事件

    /* used to detect the stale events in kqueue, rtsig, and epoll */
    unsigned
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值