ngx_listening_s

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章