Linux 上的 SO_REUSEPORT

发布于 2024-09-10 06:58:29 字数 340 浏览 4 评论 0原文

我想知道 LINUX 2.6 中是否启用了 SO_REUSEPORT 选项?

如果我尝试使用它并编译我的代码,我会收到以下错误

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 和端口号

I want to know if SO_REUSEPORT option is enabled in LINUX 2.6 or not ??

If I try to use it and compile my code I get following error

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.)

Using the above option I guess I can bind two different sockets to same IPADRESS and PORT NUMBER

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

从此见与不见 2024-09-17 06:58:29

来自 /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/

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

Hmmm. Looks like it's undefined or on the last stages of being depreciated.

Here's what a post on KernelTrap says:

On Linux, SO_REUSEADDR provide most of what SO_REUSEPORT provides on BSD.

In any case, there is absolutely no point in creating multiple TCP listeners.
Multiple threads can accept() on the same listener - at the same time.
--
Rémi Denis-Courmont
http://www.remlab.net/

蛮可爱 2024-09-17 06:58:29

尝试一下:

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

如果您要将多个 UDP 侦听器绑定到一个端口,某些平台(其中之一是 OS/X)需要设置此项。

Try this:

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

Some platforms (OS/X for one) need this to be set if you're e.g. binding multiple UDP listeners to one port.

枯叶蝶 2024-09-17 06:58:29

SO_REUSEPORT 已向后移植到 RHEL6.5 内核 2.6.32。

SO_REUSEPORT was backported to the RHEL6.5 kernel 2.6.32.

活泼老夫 2024-09-17 06:58:29

它是在 3.9 周期期间由 Tom Herbert 在一系列补丁中添加的,您可以在此处看到,为了更好地支持多线程Web服务器。

如果您想将 SO_REUSEPORT 集成到较旧的内核版本中,可以在此处找到补丁本身。

是的,您可以使用 SO_REUSEPORT 将套接字绑定到与另一个连接相同的地址和端口,只要初始连接也使用 SO_REUSEPORT (以及共享源地址和端口的任何其他连接)。这样做是为了防止恶意应用程序劫持端口。

It was added during the 3.9 cycle in a series of patches by Tom Herbert, as you can see here, in order to better support multithreaded web servers.

The patch itself can be found here if you want to integrate SO_REUSEPORT into an older kernel version.

And yes, you can use SO_REUSEPORT to bind a socket to the same address and port as another connection, as long as the initial connection also uses SO_REUSEPORT (and any other connections sharing the source address and port). This is done to prevent port hijacking by rogue applications.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文