//伺服器的被動連接配接
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
};