第 11 章 RHEL for Real Time 中的套接字选项


实时套接字是同一系统上两个进程(如 UNIX 域和环回设备)或不同系统上(如网络套接字)之间的两种数据传输机制。

传输控制协议(TCP)是最常见的传输协议,通常用于为需要恒定通信的服务实现一致的低延迟,或在低优先级限制环境中的套接字合并。

随着新应用、硬件功能和内核架构优化,TCP 必须引入新方法来有效地处理更改。新方法可能会导致不稳定的程序行为。因为程序的行为因底层操作系统组件的变化而改变,因此必须谨慎处理。

TCP 中这种行为的一个示例是发送小缓冲区的延迟。这允许将它们作为网络数据包发送。将小的写入缓冲到 TCP,并一次性全部发送,但也可以创建延迟。对于实时应用程序,TCP_NODELAY 套接字选项会禁用延迟,并在就绪后马上发送小写入。

数据传输的相关套接字选项为 TCP_NODELAYTCP_CORK

11.1. TCP_NODELAY 套接字选项

TCP_NODELAY 套接字选项禁用 Nagle 的算法。使用 setsockopt socket API 功能配置 TCP_NODELAY 会在单个数据包就绪后立即发送多个小缓冲区写入。

在发送前,通过构建连续数据包,将多个逻辑上相关的缓冲区作为单一数据包发送,从而获得更高的延迟和性能。或者,如果内存缓冲区在逻辑上相关,但不是连续的,您可以创建一个 I/O 向量,并在启用了 TCP_NODELAY 的套接字上使用 writev 传递给内核。

以下示例演示了通过 setsockopt socket API 启用 TCP_NODELAY

int one = 1;
setsockopt(descriptor, SOL_TCP, TCP_NODELAY, &one, sizeof(one));
注意

要有效地使用 TCP_NODELAY,请避免在逻辑上相关的缓冲区写入。使用 TCP_NODELAY 时,小写入会导致 TCP 发送多个缓冲区作为单独的数据包,这可能会导致整体性能不佳。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部