我试图使用以下方法关闭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计算机上。
答案 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 */
也许你可以尝试类似的东西?