《UNIX网络编程》多线程TCP C/S服务器正常启动和正常结束过程剖析

一、启动过程

1、服务器启动后,它调用socket、bind、listen、accept, 并阻塞accept调用(我们还没有启动客户)。
2、客户启动并调用socket和connect,后者引起TCP三路握手过程。当三路握手完成后,客户中的connect和服务器中的accept均返回,连接建立。
3、服务器中的的accept返回时,调用fork处理这个连接,而父进程阻塞在accept等待下一个连接。

二、结束过程

1、服务器子进程终止,关闭所有打开的描述符,客户打开的套接字由内核关闭。这导致客户TCP发送一个FIN给服务。器,服务器TCP则以ACK响应,这就是TCP连接终止的前半部分,至此,服务器的套接字处在CLOSE_WAIT状态,客户套接字则处于FIN_WAIT 状态。
2、服务器接收到FIN时,服务器接受函数(read)处于阻塞状态,于是read返回0。
3、服务器子进程终止。
4、服务器所有描述符随之关闭。由子进程来关闭套接字回应发TCP连接序列终止的最后两个分节:一个服务器到客户的FIN和客户到服务器的ACK。至此连接完全终止,客户套接字进入TIME_WAIT状态。
5、进程终止处理的另一部分是:在服务器子进程终止的时候,给父进程发送一个SIGCHLD信号,如果没有捕捉,子进程将进入僵死状态(Zombie)。

TCP状态转换图

TCP连接的分组交换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值