2009-06-25 12 views
6

मैं एक बीएसडी सॉकेट प्रयोग करने के लिए Nagle के एल्गोरिथ्म बंद करने के लिए कोशिश कर रहा हूँ:Solaris पर बीएसडी सॉकेट पर TCP_NODELAY कैसे सेट करें?

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

यह पूरी सूची के लिए शामिल हैं:

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

लेकिन संकलक TCP_NODELAY का दावा करने से पहले नहीं देखा गया है

#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 लिंकर विकल्प हैं, लेकिन मैं: इस फाइल में है टी संकलित नहीं होगा। क्या मैं कुछ भूल रहा हूँ?

यह सब सोलार्स 8 मशीन पर है।

उत्तर

12

ऐसा लगता है कि आप #include <netinet/tcp.h> खो रहे हैं - यही वह जगह है जहां TCP_... लाइव परिभाषित करता है।

+0

बिल्कुल सही, धन्यवाद! –

+0

मैंने सोलारिस 10 पर इसकी कोशिश की (मुझे हेडर के बाद इसे जोड़ना पड़ा था) और यह काम करता था। मुझे सहित त्रुटियां मिलीं - लेकिन मैंने सी प्रोग्राम की कोशिश की, इसलिए मुझे इसे में बदलना पड़ा – poundifdef

2

मेरे पास सोलारिस बॉक्स आसान नहीं है, केवल एक लिनक्स है।

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

शायद आप कुछ इसी तरह की कोशिश कर सकते?

संबंधित मुद्दे