2009-06-25 154 views
6

我試圖關閉Nagle算法的使用BSD套接字:如何在Solaris上的BSD套接字上設置TCP_NODELAY?

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連接選項,但我t只是不會編譯。我錯過了什麼嗎?

所有這些都在Solaris 8計算機上。

回答

12

看起來像你缺少#include <netinet/tcp.h> - 這就是TCP_...定義的生活。

+0

沒錯,謝謝! – 2009-06-25 18:46:50

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 */ 

或許你可以嘗試類似的東西?

相關問題