关闭

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

标签: 网络编程unixsocket服务器多线程
109人阅读 评论(0) 收藏 举报
分类:

一、启动过程

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连接的分组交换

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:59376次
    • 积分:1631
    • 等级:
    • 排名:千里之外
    • 原创:101篇
    • 转载:24篇
    • 译文:1篇
    • 评论:8条
    博客专栏
    最新评论