Ngx_close_connection 主要关闭一个connection,包括“善后”以及调用ngx_reusable_connection(c,0) ngx_free_connection来将连接放回free_connections 可以认为是ngx_get_connection的逆操作 ngx_reusable_connection ngx_reusable_connection(ngx_connection_t *c, ngx_uint_t reusable) reusable=1 ,放进queue中 reusabl...
accept之后nginx会从空闲的连接中获取一个,这个动作在ngx_get_connection中完成,然后进入HTTP初始化流程。我们这里主要关注连接状态的变化情况,它是通过ngx_resuable_connection函数进行修改。最初连接是处于free状态的,进入ngx_http_ssl_handshake完成一些基本的初始化之后,连接设置定时器开始准备接收消息,此时的超时时间是p...
在讲Nginx的事件驱动之前,得先弄明白ngx_connection_t这个结构。(定义在Ngx_connection.h)他是nginx事件驱动的基础,每一个监听在worker进程中都会为其分配一个connection,每一个监听接收到的连接,worker进程也会用connection来维护它,直到连接的终止,该connection才被回收。 额,由于它的定义实在太长了,所以这里就不列...
遍历init_cycle.listening[],调用ngx_get_connection(),为每个ngx_listening_t实例绑定一个ngx_connection_t实例,开始监听它。 这里将ngx_connetion_t.read的处理函数指定为ngx_event_accept(),然后调用ngx_add_event()将ngx_connection_t.read加入监听列表。 7. ngx_process_events() ngx_process_events()前面...
c = ngx_get_connection(s, ev->log); if (c == NULL) { if (ngx_close_socket(s) == -1) { ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno, ngx_close_socket_n ' failed'); } return; } s是连接socket的文件描述符,从连接池中获取一个连接并分配给该socket。
如在HTTP框架中,data指向ngx_http_request_t请求 在服务器端accept客户端连接成功(ngx_event_accept)后,会通过ngx_get_connection从连接池获取一个ngx_connection_t结构,也就是每个客户端连接对于一个ngx_connection_t结构, 并且为其分配一个ngx_http_connection_t结构,ngx_connection_t->data = ngx_http_connecti...
以下是 ngx_event_t 的一些字段: I/O事件 每个通过调用ngx_get_connection()的 connection 有两个事件:c->read 和 c->write。这两事件用于接受可读写socket的通知。所有的这些事件都是边缘触发模式,意味着只有socket的状态变化时它们才会触发。举个例子,假设只读了部份数据,当有更多的数据到达时,nginx不会重新发...
//file: src/core/ngx_connection.c ngx_int_t ngx_open_listening_sockets(ngx_cycle_t *cycle) { ... //要监听的 socket 对象 ls = cycle->listening.elts; for (i = 0; i < cycle->listening.nelts; i++) { //获取第i个socket s =...
一、监听套接字初始化函数ngx_http_optimize_servers ngx_http_optimize_servers主要处理Nginx服务的监听套接字 /** * ngx_http_optimize_servers:处理Nginx服务的监听套接字 * 说明:主要遍历Nginx服务器提供的端口,然后根据每一个IP地址:port这种配置创建一个监听套接字 ...