一、讲解
tcp_sendmsg_locked 函数是 Linux 内核中实现 TCP 数据发送的一个核心函数。这个函数被调用来将用户空间的数据通过 TCP 发送出去。以下是该函数的基本工作流程的中文解释:
1. 函数初始化和检查:
- 它首先检查是否使用了 TCP 零拷贝发送(MSG_ZEROCOPY)以及确保发送状态是正确的。
- 函数通过检查标志位来处理 TCP 快速打开特性。
- 设置发送超时和评估发送路径是否处于“应用受限”状态。
2. 等待连接完成:
- 如果 TCP 连接还未建立,它将等待连接完成,除非使用了 TCP 快速打开。
3. 准备发送:
- 如果存在 TCP 修复模式,它将处理特定的发送队列。
- 解析传输层控制消息。
- 清除可能影响发送队列的异步标记。
- 计算最大段大小(MSS)和发送目标大小。
4. 数据发送循环:
- 函数进入循环,开始从用户消息(&