cycle -- 5




200x200


温馨提示点击图片可在新的页面打开,图片较大,打开较慢,请耐心等待 初始化流程init_cycle 初始化  ngx_init_cycle  

#技术帖    #linux    #unix    #龙潭书斋   
初始化收尾工作至此,我们的 ngx_init_cycle 函数已经执行到了尾声,这也意味着,初始化工作即将结束,那么,让我们来一起看看都有哪些工作需要在最后处理吧释放 old_cycle 中的共享内存/* close and delete stuff that lefts from an old cycle */ /* free the unnecessary shared memory */ opart = &old_cycle->shared_memory.part; oshm_zone = opart->elts; for (i = 0; /* void */ ; i++) { if (i >= opart->nelts) { if (opart->next == NULL) { goto old_shm_zone_done; } opart = opart->next; oshm_zone = opart->elts; i = 0; } part = &cycle->shared_memory.part; shm_zone = part->elts; for (n = 0; /* void */ ; n++) {
#技术帖    #network    #龙潭书斋    #服务器   
创建 socketfd,并且设置为监听状态作为一个web服务器,初始化中最重要的一步终于到来了// 为 cycle 中的每个监听目标创建 socket,并设置为监听状态 if (ngx_open_listening_sockets(cycle) != NGX_OK) { goto failed; } ngx_open_listening_sockets在这个函数中,有我们熟悉的 TCP 服务端初始化到监听状态的代码// ngx_int_t ngx_open_listening_sockets(ngx_cycle_t *cycle) // 创建 socket 并设置为监听状态 {{{ ngx_int_t ngx_open_listening_sockets(ngx_cycle_t *cycle) { int reuseaddr; ngx_uint_t i, tries, failed; ngx_err_t err; ngx_log_t *log; ngx_socket_t s; ngx_listening_t *ls; reuseaddr = 1; #if (NGX_SUPPRESS_WARN)
#技术帖    #network    #c语言    #socket   
监听连接数组初始化// 监听链接数组初始化 n = old_cycle->listening.nelts ? old_cycle->listening.nelts : 10; cycle->listening.elts = ngx_pcalloc(pool, n * sizeof(ngx_listening_t)); if (cycle->listening.elts == NULL) { ngx_destroy_pool(pool); return NULL; } cycle->listening.nelts = 0; cycle->listening.size = sizeof(ngx_listening_t); cycle->listening.nalloc = n; cycle->listening.pool = pool; 这段代码比较简单,主要是数组的创建和初始化操作复用连接队列初始化// nginx 复用连接队列初始化 ngx_queue_init(&cycle->reusable_connections_queue); 循环双向链表结构 -- ngx_queue_t复用连接队列是一个循环双向链表结构 ngx_queue_ttypedef struc
#技术帖    #龙潭书斋    #nginx    #opensource   

200x200


main 函数众所周知,每一个C语言程序都是从main函数开始调用的,nginx当然也不例外nginx 的所有代码都在 src 目录下,这个目录下有下图6个目录

#技术帖    #目录结构    #龙潭书斋    #nginx   



京ICP备15018585号