linux就该这么学pdf免费下载
ngx_http_core_listen方法:
- 调用ngx_parse_url解析url。
- 初始化ngx_http_listen_opt_t结构lsopt
- 调用ngx_sock_ntop初始化lsopt.addr为点分十进制IP。
- 处理listen的其他配置参数,如:backlog= ,rcvbuf=, sndbuf=, ssl, so_keepalive= 等等。
- 调用ngx_http_add_listen添加到队列。
ngx_http_add_listen方法在ngx_http.c#1143
- 如果ports为NULL(不为空,就是说已经解析了一个listern),则为ngx_http_core_module的ngx_http_core_main_conf_t.ports分配ngx_http_conf_port_t
- 获取listern 的端口,赋值给p。
- 查找prots中family和port相同的,如果找到,说明两个listern监听相同的端口,是相同的协议,就不需要再分配 ngx_http_conf_port_t了。调用ngx_http_add_addresses添加到相同port的port的addr数组。
- 没找到(说明还没有解析监听过该端口),调用ngx_http_add_address把port赋值,调用ngx_array_push添加到ports数组。
ngx_http_add_addresses函数:
- 查找port->addrs数组是否已经添加了该IP。若是,调用ngx_http_add_server把对应的ngx_http_core_srv_conf_t配置添加到ngx_http_conf_addr_t的servers数组中。
- 若没找到该IP,调用ngx_http_add_address把IP初始化到ngx_http_conf_addr_t结构,添加到port的addrs数组中。
总结:监听的端口地址信息以数组的形式村到了ngx_http_core_module模块的ngx_http_core_main_conf_t结构变量中。
转载请注明:谷谷点程序 » linux ngx listen的解析