很多网络编程中都会接触到backlog这个概念,简要整理了这块内容
网络服务处理连接的过程
网络服务接收一个连接,经历以下几个步骤:
- 套接字创建:
socket(2)系统调用
,同时可以指定套接字的相关属性,比如NOBLOCK
- 套接字绑定到接口地址上:
bind(2)
,以便其他套接字可以通过connect(2)
来连接他 - 通过
listen(2)
将套接字监听起来,其接收传入连接的队列限制由listen系统调用的backlog
指定 - 连接通过
accept(2)
被网络服务接收,然后通过fork
将监听套接字fork一个连接套接字,通过子进程进行对应的数据处理,将处理的数据通过连接套接字传回给到客户端;处理完后子进程退出,通过SIGCHILD
信号告知父进程,父进程注册的相关信号处理函数回调执行,通过wait
系统调用捕获到子进程退出,完成相关资源回收过程(这块是典型的CGIFork and Exec
模型)