init -- 6




200x200


nginx 事件处理框架事件处理框架解决的问题是事件的收集、管理和分发nginx 事件处理模块主要处理的是网络事件和定时器事件 多平台兼容不同的操作系统中,nginx&n

#读书笔记    #技术帖    #epoll    #nginx   

200x200


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

#技术帖    #linux    #unix    #龙潭书斋   
daemon 进程关于 daemon 进程的介绍及创建以及需要注意的药店,请参考:daemon 守护进程 信号处理初始化nginx 有一个全局变量 signals,在 build configure 的时候写入到 os 目录下的 ngx_process.c 文件中,在不同的系统中取值不同,用来定义默认的信号处理方式// struct ngx_signal_t // 信号结构 {{{ typedef struct { int signo; char *signame; char *name; void (*handler)(int signo); } ngx_signal_t; // }}} // ngx_signal_t signals // 信号默认处理方式 {{{ ngx_signal_t signals[] = { { ngx_signal_value(NGX_RECONFIGURE_SIGNAL), "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL), "reload", ngx_signa
#技术帖    #linux    #network    #c语言   
初始化收尾工作至此,我们的 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   

200x200


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

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



京ICP备15018585号