SO_REUSEPORT в Linux - PullRequest
       33

SO_REUSEPORT в Linux

15 голосов
/ 16 июля 2010

Я хочу знать, включена ли опция 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 и номеру порта

Ответы [ 5 ]

8 голосов
/ 08 июля 2013

эта опция была сделана в ядре 3.9, смотрите этот git commit

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c617f398edd4db2b8567a28e899a88f8f574798d

5 голосов
/ 16 июля 2010

С /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.
Несколько потоков могут принимать () для одного прослушивателя - одновременно.
-
Реми Дени-Курмон
http://www.remlab.net/

4 голосов
/ 16 июня 2014

SO_REUSEPORT был перенесен в ядро ​​RHEL6.5 2.6.32.

4 голосов
/ 17 октября 2012

Попробуйте:

#ifdefined (SO_REUSEPORT)
... set this option
#endif

На некоторых платформах (OS / X для одной) эту настройку необходимо установить, например, если вы привязываете несколько прослушивателей UDP к одному порту.

3 голосов
/ 05 июля 2016

Он был добавлен Томом Гербертом во время цикла 3.9 в серии патчей, как вы можете видеть здесь , для лучшей поддержки многопоточных веб-серверов.

Сам патч может здесь , если вы хотите интегрировать SO_REUSEPORT в более старую версию ядра.

И да, вы можете использовать SO_REUSEPORT для привязки сокета к тому же адресу и порту, что и к другому соединению, еслив качестве начального соединения также используется SO_REUSEPORT (и любые другие соединения, совместно использующие адрес источника и порт).Это сделано для предотвращения захвата порта мошенническими приложениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...