Posts unp & nginx
Post
Cancel

unp & nginx

🧾 UNP × Nginx 源码对照表(完整版 / 2025)

目标:
看到 UNP 某个章节 → 立即知道 Nginx 对应的源码是什么


✔️ 第一部分:基础 Socket API → Nginx 监听与连接管理

UNP 章节内容Nginx 源码部分关键文件 / 函数
Ch4 socket创建 socket监听端口初始化ngx_create_listening_sockets()
Ch5 bind绑定地址Nginx bind 封装ngx_open_listening_sockets()
Ch6 listen/accept建立监听、接受连接连接对象创建、acceptngx_event_accept()
listen/accept handler
Ch7 TCP 连接backlog、半连接队列多 worker acceptngx_enable_accept_events()

✔️ 第二部分:I/O 模型 & Nginx 事件驱动框架

UNP 章节内容Nginx 对应文件
Ch6 阻塞/非阻塞非阻塞 IO全局 nonblockingngx_nonblocking()
Ch14 selectI/O 多路复用事件抽象层ngx_event.c
Ch15 pollpoll 模型事件接口ngx_event.h
Ch16 epollepollepoll 模块ngx_epoll_module.c
Ch17 信号处理信号驱动 IOmaster 处理信号ngx_signal_handler()

✔️ 第三部分:UNP I/O → Nginx recv/send

UNP 章节 / 内容Nginx 实现
Ch8 read统一读 API ngx_recv()
Ch9 write统一写 API ngx_send()
Ch11 readv/writev 多 buffer多链发送 ngx_writev_chain()
Ch16 sendfile 零拷贝sendfile chain ngx_linux_sendfile_chain.c
Ch13 非阻塞 connectupstream connect ngx_event_connect.c

✔️ 第四部分:TCP 选项 → Nginx tuning

UNP 内容Nginx 文件 / 实现
SO_REUSEADDRlisten ngx_open_listening_sockets()
SO_KEEPALIVETCP 保活 upstream ngx_event_connect.c
TCP_NODELAYNagle nodelay ngx_tcp_nodelay()
SNDBUF / RCVBUF缓冲区配置解析 core module

✔️ 第五部分:Timer 与超时管理

UNP 内容Nginx 文件 / 实现
Ch22 超时机制read/write 超时 event timeout ngx_event_timer.c
Ch23 时钟精度精度、红黑树 timer event
Ch24 定时任务timer 定时器管理 ngx_add_timer()

✔️ 第六部分:进程模型(UNP 不讲但 Nginx 核心)

内容Nginx 模块文件 / 函数
master/worker 进程模型ngx_process_cycle.c进程生命周期管理
平滑升级热升级ngx_reconfigure()
共享内存slab poolngx_slab.c

✔️ 第七部分:TCP 服务器框架(UNP 第 30 章) → Nginx HTTP 框架

UNP 内容Nginx 对应
异步 echo serverHTTP 请求处理
连接池ngx_connection_t
回调机制事件回调
读→解析→写HTTP 生命周期
多次读写filter chain

🧩 模块级对照(深入 HTTP)

模块UNPNginx 入口
HTTP 解析器FSM、流式解析ngx_http_parse.c
upstream非阻塞 connectngx_http_upstream.c
sendfile零拷贝ngx_linux_sendfile_chain.c
内存池malloc/freengx_palloc.c

附录 目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
第一部分 简介和TCP/IP 1

1 简介 2

1.1 概述 2

1.2 一个简单的时间获取客户程序 5

1.3 协议无关性 9

1.4 错误处理:包裹函数 10

1.5 一个简单的时间获取服务器程序 12

1.6 本书中客户/服务器程序示例索引表 14

1.7 OSI模型 16

1.8 BSD网络支持历史 17

1.9 测试用网络及主机 19

1.10 Unix标准 22

1.11 64位体系结构 24

1.12 小结 25

习题 25

2 传输层:TCPUDPSCTP 27

2.1 概述 27

2.2 总图 27

2.3 用户数据报协议(UDP 29

2.4 传输控制协议(TCP 30

2.5 流控制传输协议(SCTP 31

2.6 TCP连接的建立和终止 31

2.7 TIME_WAIT状态 37

2.8 SCTP关联的建立和终止 38

2.9 端口号 42

2.10 TCP端口号与并发服务器 43

2.11 缓冲区大小及限制 45

2.12 标准因特网服务 50

2.13 常见因特网应用的协议使用 51

2.14 小结 52

习题 53

第二部分 基本套接字编程 55

3 套接字编程简介 56

3.1 概述 56

3.2 套接字地址结构 56

3.3 -结果参数 61

3.4 字节排序函数 63

3.5 字节操纵函数 66

3.6 inet_atoninet_addrinet_ntoa函数 67

3.7 inet_ptoninet_ntop函数 68

3.8 sock_ntop和相关函数 70

3.9 readnwritenreadline函数 72

3.10 小结 76

习题 76

4 基本TCP套接字编程 77

4.1 概述 77

4.2 socket函数 77

4.3 connect函数 80

4.4 bind函数 81

4.5 listen函数 84

4.6 accept函数 88

4.7 forkexec函数 90

4.8 并发服务器 91

4.9 close函数 93

4.10 getsocknamegetpeername函数 94

4.11 小结 96

习题 96

5 TCP客户/服务器程序示例 97

5.1 概述 97

5.2 TCP回射服务器程序:main函数 97

5.3 TCP回射服务器程序:str_echo函数 98

5.4 TCP回射客户程序:main函数 99

5.5 TCP回射客户程序:str_cli函数 100

5.6 正常启动 101

5.7 正常终止 102

5.8 POSIX信号处理 103

5.9 处理SIGCHLD信号 106

5.10 waitwaitpid函数 108

5.11 accept返回前连接中止 111

5.12 服务器进程终止 112

5.13 SIGPIPE信号 113

5.14 服务器主机崩溃 114

5.15 服务器主机崩溃后重启 115

5.16 服务器主机关机 116

5.17 TCP程序例子小结 116

5.18 数据格式 117

5.19 小结 120

习题 120

6 I/O复用:selectpoll函数 122

6.1 概述 122

6.2 I/O模型 122

6.3 select函数 127

6.4 str_cli函数(修订版) 132

6.5 批量输入 133

6.6 shutdown函数 136

6.7 str_cli函数(再修订版) 137

6.8 TCP回射服务器程序(修订版) 138

6.9 pselect函数 142

6.10 poll函数 144

6.11 TCP回射服务器程序(再修订版) 146

6.12 小结 148

习题 149

7 套接字选项 150

7.1 概述 150

7.2 getsockoptsetsockopt函数 150

7.3 检查选项是否受支持并获取默认值 152

7.4 套接字状态 156

7.5 通用套接字选项 156

7.6 IPv4套接字选项 168

7.7 ICMPv6套接字选项 169

7.8 IPv6套接字选项 169

7.9 TCP套接字选项 171

7.10 SCTP套接字选项 173

7.11 fcntl函数 182

7.12 小结 184

习题 184

8 基本UDP套接字编程 186

8.1 概述 186

8.2 recvfromsendto函数 187

8.3 UDP回射服务器程序:main函数 187

8.4 UDP回射服务器程序:dg_echo函数 188

8.5 UDP回射客户程序:main函数 190

8.6 UDP回射客户程序:dg_cli函数 190

8.7 数据报的丢失 191

8.8 验证接收到的响应 191

8.9 服务器进程未运行 193

8.10 UDP程序例子小结 194

8.11 UDPconnect函数 196

8.12 dg_cli函数(修订版) 199

8.13 UDP缺乏流量控制 200

8.14 UDP中的外出接口的确定 203

8.15 使用select函数的TCPUDP回射服务器程序 204

8.16 小结 206

习题 207

9 基本SCTP套接字编程 208

9.1 概述 208

9.2 接口模型 208

9.3 sctp_bindx函数 212

9.4 sctp_connectx函数 213

9.5 sctp_getpaddrs函数 213

9.6 sctp_freepaddrs函数 213

9.7 sctp_getladdrs函数 214

9.8 sctp_freeladdrs函数 214

9.9 sctp_sendmsg函数 214

9.10 sctp_recvmsg函数 215

9.11 sctp_opt_info函数 215

9.12 sctp_peeloff函数 216

9.13 shutdown函数 216

9.14 通知 217

9.15 小结 221

习题 222

10 SCTP客户/服务器程序例子 223

10.1 概述 223

10.2 SCTP一到多式流分回射服务器程序:main函数 223

10.3 SCTP一到多式流分回射客户程序:main函数 225

10.4 SCTP流分回射客户程序:sctpstr_cli函数 226

10.5 探究头端阻塞 228

10.6 控制流的数目 233

10.7 控制终结 233

10.8 小结 234

习题 235
This post is licensed under CC BY 4.0 by the author.

Contents

Trending Tags