如何在 Solaris 上的 BSD 套接字上设置 TCP_NODELAY?

Posted

技术标签:

【中文标题】如何在 Solaris 上的 BSD 套接字上设置 TCP_NODELAY?【英文标题】:How to set TCP_NODELAY on BSD socket on Solaris? 【发布时间】:2009-06-25 18:35:33 【问题描述】:

我正在尝试使用以下方法关闭 Nagle 的 BSD 套接字算法:

setsockopt(newSock, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof flag);

但编译器声称TCP_NODELAY 以前从未见过:

error: `TCP_NODELAY' undeclared (first use this function)

这是包含该文件的完整列表:

#include <arpa/inet.h>
#include <fcntl.h>
#include <iostream>
#include <netdb.h>
#include <string>
#include <sys/socket.h>
#include <sys/types.h>
using namespace std;

我也有-lnsl-lsocket 链接器选项,但它无法编译。我错过了什么吗?

所有这些都在 Solaris 8 机器上。

【问题讨论】:

【参考方案1】:

看起来您缺少#include &lt;netinet/tcp.h&gt; - 这就是TCP_... 定义直播的地方。

【讨论】:

我在 Solaris 10 上试过这个(我必须在你已经包含的标题之后添加它)并且它有效。我在包含 时遇到了错误 - 但我尝试了一个 C 程序,所以我不得不将其更改为 【参考方案2】:

我手边没有 Solaris 机器,只有一个 Linux 机器。

grep -ri TCP_NODELAY /usr/include/*

结果:

/usr/include/linux/tcp.h:#define TCP_NODELAY            1       /* Turn off Nagle's algorithm. */
/usr/include/netinet/tcp.h:#define      TCP_NODELAY      1      /* Don't delay send to coalesce packets  */

也许你可以尝试类似的方法?

【讨论】:

以上是关于如何在 Solaris 上的 BSD 套接字上设置 TCP_NODELAY?的主要内容,如果未能解决你的问题,请参考以下文章

BSD套接字不工作

如何克服 Linux 上的 ksh 与 AIX/Solaris/HPUX 上安装的 ksh 之间的不兼容问题?

您如何识别 Solaris 上的 Informix 版本?

CFNetwork 在 iOS 和 MacOS 上优于 BSD 套接字和 GCD 的优势?

使用 java,如何获取 solaris zfs 文件系统上的可用空间量?

Java:Solaris 上的 AWT [关闭]