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

时间:2009-06-25 18:35:34

标签: c++ c solaris sockets

我试图使用以下方法关闭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计算机上。

2 个答案:

答案 0 :(得分:13)

您似乎缺少#include <netinet/tcp.h> - 这就是TCP_...定义的地方。

答案 1 :(得分:3)

我没有方便的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  */

也许你可以尝试类似的东西?