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

原创 2017年07月24日 19:50:49

一、启动过程

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

版权声明:本博客的所有内容采用Creative Commons(知识共享)许可证,作者权利:署名(BY)& 非商业性使用(NC)。转载时请务必标明文章超链接、作者信息和本声明,禁止用于商业用途。 https://blog.csdn.net/thinkerleo1997/article/details/76037279

UNIX网络编程(一)一个简易的TCP C/S模型(echo sever)

简易的TCP C/S模型实现
  • zero_witty
  • zero_witty
  • 2017-02-08 16:22:54
  • 697

Linux网络编程 - TCP Socket 简单练习:线程池实现并发服务器

服务器函数执行流程 main init_system creat_pthread_pool child_work thread_m...
  • ygl840455828ygl
  • ygl840455828ygl
  • 2016-09-05 10:36:52
  • 1910

Linux网络编程——tcp并发服务器(多线程)

tcp多线程并发服务器 多线程服务器是对多进程服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建。据统计,创建线程与创建进程要快 ...
  • lianghe_work
  • lianghe_work
  • 2015-06-15 15:27:04
  • 9121

Unix网络编程之IO复用

select函数   作用
  • wxwd1
  • wxwd1
  • 2014-08-04 15:55:41
  • 998

tcp客户端正常终止过程

本文资料来自《unix网络编程》客户端代码int main(int argc, char **argv) { int sockfd; struct so...
  • SABERWW
  • SABERWW
  • 2015-03-01 23:39:00
  • 167

TCP建立与终止

TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须在双方之间建立一条连接。这种两端间连接的建立与无连接协议UDP不同,UDP向另一端发送数据报时,无需任何预告的握手。 ...
  • zhuaimiao1
  • zhuaimiao1
  • 2015-09-26 23:18:37
  • 299

TCP/IP网络编程 基于Linux编程_4 --多线程服务器端的实现

线程基本概念前面我们讲过多进程服务器,但我们知道它开销很大,因此我们才引入线程,我们可以把它看成是一种轻量级进程。它相比进程有如下几个优点: 线程的创建和上下文切换开销更小且速度更快。 线程间交换数据...
  • u010223072
  • u010223072
  • 2015-10-24 16:46:10
  • 1579

TCP-IP学习笔记四:NIO的网络编程-多线程实例

TCP/IP学习笔记四:NIO的网络编程-多线程实例标签(空格分隔): 网络编程 NIO 多线程NIO的多线程编程 对于单线程的程序来说,我们无法达到并行处理,我们要向达到并行处理,必定会使用多...
  • MOTUI
  • MOTUI
  • 2016-10-11 21:51:46
  • 3327

unix启动过程

系统初启时,引导程序把系统内核放在内存低地址的48KB内(系统内核原来在哪?下面有解释)。然后经过内部的初启程序为系统建立了进程0和进程1。进程0是所有进程的祖先,也是系统中唯一的核心态进程,它负责把...
  • benh
  • benh
  • 2005-11-01 20:01:00
  • 3508

(笔记)Linux下网络编程,采用TCP协议实现的C/S架构

TCP/UDP介绍TCP(Transfer Control Protocol)传输控制协议是一种面向连接的协议, 当我们的网络程序使用这个协议的时候,可以保证我们的客户端和服务端的通信是可靠的,安全的...
  • fly__chen
  • fly__chen
  • 2016-10-04 20:03:14
  • 1298
收藏助手
不良信息举报
您举报文章:《UNIX网络编程》多线程TCP C/S服务器正常启动和正常结束过程剖析
举报原因:
原因补充:

(最多只允许输入30个字)