【网络编程】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的半关闭的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)
- 2025-01-03停止思考数据管道,开始构建数据平台:介绍Analytics Engineering Framework