2009-06-25 17 views
6

Bir BSD soketini kullanarak bir BSD soketini kapatmaya çalışıyorum:TCP_NODELAY, Solaris üzerindeki BSD soketinde nasıl ayarlanır?

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

ancak derleyici TCP_NODELAY'un daha önce görülmediğini iddia ediyor:

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

Bu, aşağıdakilerin tam listesidir. Bu dosya şudur:

#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; 

Ayrıca -lnsl ve -lsocket linker seçeneklerine de sahibim, ama sadece derlemeyecek. Bir şey mi eksik?

Bütün bunlar bir Solaris 8 makinesinde.

cevap

12

#include <netinet/tcp.h> eksik gibi görünüyor - bu nerede TCP_... canlı tanımlar.

+0

Tam doğru, teşekkürler! –

+0

Bunu Solaris 10'da denedim (zaten eklediğiniz başlıklardan sonra eklemek zorundaydım) ve işe yaradı. dahil olmak üzere hatalarım var - ancak bir C programını denedim, bu yüzden onu olarak değiştirdim – poundifdef

2

Sadece bir Solaris kutusu kullanmam, sadece bir Linux. içinde

grep -ri TCP_NODELAY /usr/include/* 

sonuçları:

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

Belki benzer bir şey deneyebilir?