2009-06-25 11 views
6

Sto cercando di spegnere l'algoritmo di Nagle per un socket BSD utilizza:Come impostare TCP_NODELAY sul socket BSD su Solaris?

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

ma il compilatore sostiene TCP_NODELAY non è stato mai visto prima:

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

Questa è la lista completa di include per il file è in questo:

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

ho anche le opzioni -lnsl e -lsocket linker, ma io semplicemente non verrà compilato. Mi sto perdendo qualcosa?

Tutto questo è su una macchina Solaris 8.

risposta

12

Sembra che manchi #include <netinet/tcp.h> - che è dove TCP_... definisce dal vivo.

+0

Esattamente, grazie! –

+0

Ho provato questo su Solaris 10 (ho dovuto aggiungerlo dopo le intestazioni che hai già incluso) e ha funzionato. Ho avuto errori con incluso - ma ho provato un programma C, quindi ho dovuto cambiarlo in poundifdef

2

Non ho una scatola Solaris a portata di mano, solo una Linux.

grep -ri TCP_NODELAY /usr/include/* 

risultati in:

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

Forse si potrebbe provare qualcosa di simile?

Problemi correlati