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);