本文主要是介绍nginx0.1.0之event模块初始化源码分析(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文分析nginx的event在初始化时的第一个步骤,就是执行每个类型为NGX_EVENT_MODULE的模块的create_conf函数。该版本一共有8个这样的模块。下面我们看一下各个模块create_conf函数的代码。
这是ngx_event_core_module模块的create_conf函数。
// 创建存储事件模块配置的结构体
static void *ngx_event_create_conf(ngx_cycle_t *cycle)
{ngx_event_conf_t *ecf;ngx_test_null(ecf, ngx_palloc(cycle->pool, sizeof(ngx_event_conf_t)),NGX_CONF_ERROR);ecf->connections = NGX_CONF_UNSET_UINT;ecf->use = NGX_CONF_UNSET_UINT;ecf->multi_accept = NGX_CONF_UNSET;ecf->accept_mutex = NGX_CONF_UNSET;ecf->accept_mutex_delay = NGX_CONF_UNSET_MSEC;ecf->name = (void *) NGX_CONF_UNSET;#if (NGX_DEBUG)ngx_init_array(ecf->debug_connection, cycle->pool, 5, sizeof(in_addr_t),NGX_CONF_ERROR);
#endifreturn ecf;
}
剩下的几个event子模块都是事件驱动相关的,epoll的create_conf函数如下。
static void *ngx_epoll_create_conf(ngx_cycle_t *cycle)
{ngx_epoll_conf_t *epcf;ngx_test_null(epcf, ngx_palloc(cycle->pool, sizeof(ngx_epoll_conf_t)),NGX_CONF_ERROR);epcf->events = NGX_CONF_UNSET;return epcf;
}
kqueue的如下。
static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle)
{ngx_kqueue_conf_t *kcf;ngx_test_null(kcf, ngx_palloc(cycle->pool, sizeof(ngx_kqueue_conf_t)),NGX_CONF_ERROR);kcf->changes = NGX_CONF_UNSET;kcf->events = NGX_CONF_UNSET;return kcf;
}
有些子模块没有实现create_conf函数,所有模块的create_conf函数执行完后。内存视图如下。
这篇关于nginx0.1.0之event模块初始化源码分析(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!