最新消息: 新版网站上线了!!!

linux ngx listen的解析

listen的解析:

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的解析