本节我们介绍一下nginx中对socket connection的抽象。
1. ngx_listening_t数据结构
下面我们对ngx_listening_t
数据结构做一个简单的介绍:
下面我们对涉及到的一些知识点做一个简要的说明:
1) TCP keepalive
关于TCP keepalive有如下几个选项:
-
TCP_KEEPIDLE
: 设置连接上如果没有数据发送的话,多久后发送keepalive探测分组,单位是秒
-
TCP_KEEPINTVL
: 前后两侧探测之间的时间间隔,单位是秒
-
TCP_KEEPCNT
: 关闭一个非活跃连接之前的最大重试次数
2) SO_REUSEADDR与SO_REUSEPORT选项
SO_REUSEADDR
提供如下4个功能:
-
SO_REUSEADDR
允许启动一个监听服务器并绑定众所周知端口,即使以前建立的将此端口用作他们的本地端口的连接仍存在。则通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。
-
SO_REUSEADDR
允许在同一端口上启动同一服务器的多个实例,只要每个实例绑定一个不同的本地IP地址即可。对于TCP,我们根本不能启动绑定相同IP地址和端口的多个服务器。
-
SO_REUSEADDR
允许单个进程绑定同一端口到多个套接字上,只要每个绑定指定不同的本地IP地址即可。则一般不用于TCP服务器。
-
SO_REUSEADDR
允许完全重复的绑定: 当一个IP地址和端口绑定到某个套接字上时,还允许此IP地址和端口绑定到另一个套接字上。一般来说,这个特性仅在支持多播的系统上才有,而且只对UDP套接字而言(TCP不支持多播)
SO_REUSEPORT
选项有如下含义:
2. 相关枚举及宏定义
3. ngx_connection_s数据结构
下面我们对ngx_connection_s
数据结构做一个简单的介绍:
4. ngx_set_connection_log宏
用于设置一个连接所对应的日志操作
5. 相关函数声明
[参考]:
-
TCP KeepAlive的几个附加选项
-
nginx源码初读
-
nginx学习十 ngx_cycle_t 、ngx_connection_t 和ngx_listening_t
-
nginx源码分析—处理继承的sockets
-
AcceptEx
-
TCP套接字端口复用SO_REUSEADDR
-
accept filter
-
nginx学习十 ngx_cycle_t 、ngx_connection_t 和ngx_listening_t
-
nginx源码分析—处理继承的sockets
-
nginx继承socket 和 热代码替换
-
close_on_exec标志位的作用