关于NGINX中的阅读:
1、建立监听socket:
ngx_open_listening_sockets
cycle->listening.elts 这个里面存放着的是监听的socket,并且socketfd是已经bind-》listen之后的;
对于套接字调用setsockopt设置了:SO_REUSEPORT、SO_REUSEADDR
2、关于监听的socket的可读事件的处理函数:ngx_event_accept
其中C为连接池中分配给这个socket的链接池成员
rev = c->read;
rev->handler = ngx_event_accept;
并将所有监听的套接字全都加入到epool的容器中;
3、关于进程是如何epoll_wait要监听的socket文件的:
woker进程执行过程中的函数:ngx_process_events_and_timers会执行ngx_trylock_accept_mutex,进行上锁。如果上锁成功,就调用ngx_process_events
4、在ngx_event_accept函数中会调用:
ngx_http_init_connection
5、在ngx_http_init_connection函数中:
会把链接事件的读写事件的函数进行修改:
rev = c->read;
rev->handler = ngx_http_wait_request_handler;
c->write->handler = ngx_http_empty_handler;