Я хочу знать, включена ли опция SO_REUSEPORT в LINUX 2.6 или нет??
Если я пытаюсь использовать его, и скомпилировать мой код я получаю следующую ошибку
01.c:72: error: `SO_REUSEPORT' undeclared (first use in this function)
01.c:72: error: (Each undeclared identifier is reported only once
01.c:72: error: for each function it appears in.)
Используя вышеупомянутую опцию я предполагаю, что могу связать два различных сокета с тем же IPADRESS и НОМЕРОМ ПОРТА
Из /usr/include/asm-generic/socket.h
:
/* For setsockopt(2) */
#define SOL_SOCKET 1
#define SO_DEBUG 1
#define SO_REUSEADDR 2
#define SO_TYPE 3
#define SO_ERROR 4
#define SO_DONTROUTE 5
#define SO_BROADCAST 6
#define SO_SNDBUF 7
#define SO_RCVBUF 8
#define SO_SNDBUFFORCE 32
#define SO_RCVBUFFORCE 33
#define SO_KEEPALIVE 9
#define SO_OOBINLINE 10
#define SO_NO_CHECK 11
#define SO_PRIORITY 12
#define SO_LINGER 13
#define SO_BSDCOMPAT 14
/* To add :#define SO_REUSEPORT 15 */
Хммм. Похоже, он не определен или находится на последних стадиях амортизации.
Вот что в сообщении на KernelTrap говорит:
В Linux SO_REUSEADDR обеспечивает большую часть того, что SO_REUSEPORT предоставляет в BSD.
В любом случае нет никакого смысла создавать несколько прослушивателей TCP.
Несколько потоков могут accept () на одном слушателе одновременно.
-
Реми Дени-Курмон
http://www.remlab.net/