TCP客户端与服务器函数调用过程及特殊情况

本文介绍了TCP客户端与服务器的连接流程,包括服务器的socket创建、bind、listen、accept,以及客户端的socket创建、connect。在连接过程中,详细讨论了'三次握手'和'四次挥手'。同时,文章探讨了特殊情况,如accept前连接终止、服务器进程崩溃、服务器主机崩溃、服务器重启和主机关机等,并提出了解决策略,如重新调用accept和使用keep-alive机制。
摘要由CSDN通过智能技术生成

基本结构如下图所示:

一般而言服务器是被动建立连接,服务器调用socket创建套接字,bind给socket分配具体的ip地址以及端口号,再调用listen函数将刚创建好的socket放入监听队列,之后调用accept等待指定地址(协议)的客户端的连接。

客户端调用socket创建套接字,随后connect来建立连接,客户端的socket的bind操作在connect中隐藏完成。

调用connect之后发生“三次握手”建立TCP连接,随后客户端与服务器之间开始传输数据;

客户端调用close(),发生“四次挥手”撤销TCP连接。

特殊情况:

1、在accept返回之前连接终止

由于系统中断或客户端传入RST,解决办法:再次调用accept即可。因为TCP连接是在内核之中完成的,与accept函数执行并未干系。

2、服务器进程崩溃(子进程终止)

服务器主动发送FIN关闭TCP连接的服务器端,但实际上是服务器的进程都kill掉了,于是客户端继续发送数据,这时候服务器只能响应一个RST,客户端有可能选择忽视掉RST信号,而继续接收数据(例如立刻调用别的读取数据函数),此时就会返回一个错误。

3、服务器主机崩溃(断网)

一般情况下会一直由TCP重传机制来不断重传,直到超出TCP重传定时器所设时限。视为放弃连接ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值