Как установить TCP_NODELAY для сокета BSD в Solaris? - PullRequest
6 голосов
/ 25 июня 2009

Я пытаюсь отключить алгоритм 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.

Ответы [ 2 ]

13 голосов
/ 25 июня 2009

Похоже, вам не хватает #include <netinet/tcp.h> - вот где TCP_... определяет лайв.

3 голосов
/ 25 июня 2009

У меня под рукой нет коробки для 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  */

Возможно, вы могли бы попробовать нечто подобное?

...