如何在 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 <netinet/tcp.h>
- 这就是TCP_...
定义直播的地方。
【讨论】:
我在 Solaris 10 上试过这个(我必须在你已经包含的标题之后添加它)并且它有效。我在包含我手边没有 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何克服 Linux 上的 ksh 与 AIX/Solaris/HPUX 上安装的 ksh 之间的不兼容问题?
CFNetwork 在 iOS 和 MacOS 上优于 BSD 套接字和 GCD 的优势?