设置 TCP_NODELAY

设置 TCP_NODELAY

我在 Solaris 上运行的应用程序需要及时向客户端发送 tcp 包,但有时包发送延迟。我知道可以使用 TCP_NODELAY 创建套接字来解决这个问题,但代码无法更改。有人能告诉我在 Solaris(任何版本)中在哪里将 TCP_NODELAY 设置为 ON 吗?Solaris 是否支持此参数。我搜索了手册,但没有看到任何有用的信息。

答案1

Solaris 支持 TCP_NODELAY 作为套接字选项,您可以在代码中设置 - 没有全局设置来强制所有连接都启用它。我能想到的最好的办法是编写一个小的 LD_PRELOAD 模块,插入 socket() 或 connect() 以调用所需的 getsockopt()。

答案2

如果不修改代码,就无法修复代码。你不会找到真正的解决方案,因为问题出在代码中,而你不愿意修改代码。将出站数据交给 TCP 堆栈时必须遵循一些规则,如果代码不遵循这些规则,就会出现 200 毫秒的延迟。这就是 TCP 的工作方式——它不能保证及时传输。

相关内容