【网络编程】TCPIP-6-TCP的半关闭
2021/8/23 17:06:09
本文主要是介绍【网络编程】TCPIP-6-TCP的半关闭,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 前言
- 6. TCP 的半关闭
- 6.1 何为半关闭
- 6.2 半关闭解决的用途
- 6.3 相关函数
- 参考
前言
说明:
- demo 基于 Linux。
6. TCP 的半关闭
关闭套接字API有:
- close():单方面全断开。
- shutdown():可选断开某个流。
6.1 何为半关闭
如图分为输入流和输出流两个流,关闭其一就是半关闭。
6.2 半关闭解决的用途
单方面断开可能带来的问题如图:
主机A发完了就断开了,万一主机B还有数据恢复咋搞。
那就采用半关闭,主机A发完就关闭发送流,保留接收流。
6.3 相关函数
/* sock: 需要断开套接字文件描述符 howto: 传递断开方式信息 成功时返回 0 ,失败时返回 -1 */ #include <sys/socket.h> int shutdown(int sock, int howto);
参数howto
:
SHUT_RD
: 断开输入流。套接字无法接收,同时,缓冲区的数据也被清空。SHUT_WR
: 断开输出流。套接字无法发送,但是和close()
一样,缓冲区的数据依旧能发送出去。SHUT_RDWR
: 同时断开 I/O 流。同时关闭 I/O 流。
小知识:
- 调用
close()
后:- 输入缓冲区的数据被丢弃。
- 输出缓冲区的数据依旧能发送到目的端。
- 调用
shutdown()
后:- 关闭输入流后,输入缓冲区的数据被丢弃。后面新来的数据流,会对其进行 ACK,然后丢弃。
- 关闭输出流后,输出缓冲区的数据依旧能发送到目的端。
参考
- 《TCP/IP网络编程》
- 李柱明博客-TCP/IP TCP详细笔记
- github 阿婆主
这篇关于【网络编程】TCPIP-6-TCP的半关闭的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-18uniapp 怎么定义对象属性?-icode9专业技术文章分享
- 2024-11-18克罗内克积是什么?-icode9专业技术文章分享
- 2024-11-18uniapp怎么实现点击防抖和节流功能?-icode9专业技术文章分享
- 2024-11-18uniapp实现全局的监听和接收有哪些方法?-icode9专业技术文章分享
- 2024-11-18TCPDF与mpdf的区别与优势是什么?-icode9专业技术文章分享
- 2024-11-17getExternalFilesDir这个方法哪些安卓版本可以使用?-icode9专业技术文章分享
- 2024-11-17app下载好后,安装包更新代码怎么写?-icode9专业技术文章分享
- 2024-11-17login-customer-id 如何获取?-icode9专业技术文章分享
- 2024-11-17使用 vite加载.env 文件环境变量无法加载是什么原因?-icode9专业技术文章分享
- 2024-11-17tp钱包是什么,有哪些功能?-icode9专业技术文章分享