第 9 章 用于 Real Time 的 RHEL 中的套接字选项


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

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

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

TCP 中此类行为的一个示例是发送小缓冲区的延迟。这允许将它们作为网络数据包发送。缓冲区小的写入 TCP 并在所有时候都进行正常发送,但也可以创建延迟。对于实时应用程序,TCP_NODELAY socket 选项禁用延迟,并在它们就绪时立即发送小写入。

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

9.1. TCP_NODELAY socket 选项

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

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

以下示例演示了通过 setsockopt 套接字 API 启用 TCP_NODELAY

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

要有效地使用 TCP_NODELAY,避免小、逻辑相关的缓冲区写入操作。使用 TCP_NODELAY 时,小型写入使 TCP 发送多个缓冲区作为单个数据包,这可能会降低整体性能。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat