TCP/IP网络编程笔记-ch7.优雅地断开套接字连接

函数

半关闭的shutdown函数

#include<sys/socket.h>

@param sock:需要断开的套接字文件描述符
@param howto:传递断开方式信息
int shutdown(int sock,int howto);
//成功时返回0,失败返回-1
howto值断开连接方式
SHUT_RD断开输入流
SHUT_WR断开输出流
SHUT_RDWR同时断开I/O流

注意:howto为SHUT_RDWR时,同时断开I/O流相当于分2次调用shutdown函数,其中一次以SHUT_R为参数,一次以SHUT_WR为参数。

知识点

单方面的断开带来的问题

通信一方调用close或closesocket,可能导致无法接收到另一方刚刚发出的数据。
为解决这一问题,半关闭(Half-close)应运而生,半关闭只关闭一部分数据交换中使用的流,即可传输数据但不能接受,或可接受数据但不能传输。即只关闭流的一半。

套接字和流

两台主机间建立TCP套接字连接,每个主机会拥有单独的输入流和输出流,其中一台的输入流与另一台的输出流相连,输出流与另一台的输入流相连。
而优雅地断开连接方式即每台主机只断开其中一个流而非同时断开两个流。

为何需要半关闭

服务器:
如果调用close函数,它会在被调用同时向对方发送EOF让对方停止发送数据,但也无法再接收到对方在接收到EOF前发送的数据
而调用shutdown函数,只关闭服务器的输出流,可以发送EOF让对方停止发送数据,也能接收到对方在接收到EOF前发送的数据

实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QEvqMgEA-1641994277907)(https://note.youdao.com/yws/res/c/WEBRESOURCEe6c34e77fcd9b653c82ac2c5f4b9660c)]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值