ngx_connection_t结构体
//服务器的被动连接
struct ngx_connection_s {
//连接未使用时候,data域充当连接链表中的next指针.
//当连接被使用时候,data域的意义由模块而定.
void *data;
//连接对应的读事件
ngx_event_t *read;
//连接对应的写事件
ngx_event_t *write;
//套接字句柄
ngx_socket_t fd;
//直接接收网络字节流的方法
ngx_recv_pt recv;
//直接放松网络字节流的方法
ngx_send_pt send;
//以ngx_chain链表为参数,接收网络字节流的方法
ngx_recv_chain_pt recv_chain;
//以ngx_chain链表为参数,发送网络字节流的方法
ngx_send_chain_pt send_chain;
//这个链接对应的listening_t监听对象.
//此链接由ngx_listening_t监听的事件建立
ngx_listening_t *listening;
//这个连接已经发送出去的字节数
off_t sent;
//记录日志
ngx_log_t *log;
//在accept一个新连接的时候,会创建一个内存池,而这个连接结束时候,会销毁一个内存池.
//这里所说的连接是成功建立的tcp连接.内存池的大小由pool_size决定
//所有的ngx_connect_t结构体都是预分配的
ngx_pool_t *pool;
//连接客户端的结构体
struct sockaddr *sockaddr;
//连接客户端的结构体长度
socklen_t socklen;
//连接客户端的ip(字符串形式)
ngx_str_t addr_text;
#if (NGX_SSL)
ngx_ssl_connection_t *ssl;
#endif
//本机中监听端口对应的socketaddr结构体
//也就是listen监听对象中的socketaddr成员
struct sockaddr *local_sockaddr;
//用于接收和缓存客户端发来的字符流
ngx_buf_t *buffer;
//该字段表示将该连接以双向链表形式添加到cycle结构体中的
//reusable_connections_queen双向链表中,表示可以重用的连接.
ngx_queue_t queue;
//连接使用次数,每次建立一条来自客户端的连接,
//或者建立一条与后端服务器的连接,number+1
ngx_atomic_uint_t number;
//处理请求的次数
ngx_uint_t requests;
//
unsigned buffered:8;
//日志级别
unsigned log_error:3; /* ngx_connection_log_error_e */
//不期待字符流结束
unsigned unexpected_eof:1;
//连接超时
unsigned timedout:1;
//连接处理过程中出现错误
unsigned error:1;
//标识此链接已经销毁,内存池,套接字等都不可用
unsigned destroyed:1;
//连接处于空闲状态
unsigned idle:1;
//连接可以重用
unsigned reusable:1;
//连接关闭
unsigned close:1;
//正在将文件中的数据法网另一端
unsigned sendfile:1;
//连接中发送缓冲区的数据高于低潮,才发送数据.
//与ngx_handle_write_event方法中的lowat相对应
unsigned sndlowat:1;
//使用tcp的nodely特性
unsigned tcp_nodelay:2; /* ngx_connection_tcp_nodelay_e */
//使用tcp的nopush特性
unsigned tcp_nopush:2; /* ngx_connection_tcp_nopush_e */
#if (NGX_HAVE_IOCP)
unsigned accept_context_updated:1;
#endif
#if (NGX_HAVE_AIO_SENDFILE)
unsigned aio_sendfile:1;
ngx_buf_t *busy_sendfile;
#endif
#if (NGX_THREADS)
ngx_atomic_t lock;
#endif
};