ngx_listening_s
這個結構體在Nginx中用來監聽一個端口。位於“Nginx包/src/core/ngx_connection.h”下。
typedef struct ngx_listening_s ngx_listening_t;
struct ngx_listening_s {
//socket套接字句柄
ngx_socket_t fd;
//監聽sockaddr地址
struct sockaddr *sockaddr;
//sockaddr地址長度
socklen_t socklen;
/* 存儲IP地址的字符串addr_text最大長度,即指定了addr_text所分配的內存大小 */
size_t addr_text_max_len;
//以字符串形式儲存IP地址
ngx_str_t addr_text;
//套接字類型
int type;
/* TCP實現監聽時的backlog隊列,它表示允許正在通過三次握手建立連接但還未任何進程開始處理連接的最大數 */
int backlog;
//內核中對於這個套接字的接收緩衝區大小
int rcvbuf;
//內核中對這個套接字的發送緩衝區大小
int sndbuf;
//新的TCP連接成功後的處理方法
ngx_connection_handler_pt handler;
/* 保存當前監聽端口對應的所有主機名 */
void *servers;
//log和logp都是可用日誌對象指針
ngx_log_t log;
ngx_log_t *logp;
//爲新的TCP連接創建內存池的大小
size_t pool_size;
//TCP連接建立後,在post_accept_timeout秒之後仍然沒有收到用戶數據,則內核直接丟棄連接
ngx_msec_t post_accept_timeout;
//指向前一個ngx_listening_t結構
ngx_listening_t *previous;
//當前監聽句柄對應着的ngx_connection_t結構體
ngx_connection_t *connection;
//1:當前監聽句柄有效;0:正常關閉
unsigned open:1;
//1:用已有的ngx_cycle_t來初始化ngx_cycle_t結構體時,不關閉監聽端口,對於運行中升級有用
unsigned remain:1;
//1:跳過設置當前ngx_listening_t結構體中的套接字;0:正常初始化
unsigned ignore:1;
//表示是否以綁定
unsigned bound:1;
//1:當前監聽句柄來自前一個進程
unsigned inherited:1;
//未使用
unsigned nonblocking_accept:1;
//1:已開始監聽
unsigned listen:1;
//表示是否阻塞
unsigned nonblocking:1;
//無意義
unsigned share:1;
//1:Nginx將網絡地址轉變爲字符串形式的地址
unsigned addr_ntop:1;
};
//在監聽端口上成功建立新的TCP連接後,回調handler方法
typedef void (*ngx_connection_handler_pt)(ngx_connection_t *c);