A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://stackoverflow.com/a/24234083/6081394 below:

sockets - SO_REUSEPORT on linux

Asked 14 years, 11 months ago

Viewed 35k times

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

amphetamachine

30.8k1212 gold badges6868 silver badges7474 bronze badges

asked Jul 16, 2010 at 4:36

codingfreakcodingfreak

4,5951111 gold badges5252 silver badges6161 bronze badges

answered Jul 8, 2013 at 8:14

user2559936user2559936

10733 silver badges66 bronze badges

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/

answered Jul 16, 2010 at 4:49

amphetamachineamphetamachine

30.8k1212 gold badges6868 silver badges7474 bronze badges

1

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.

answered Oct 17, 2012 at 9:46

Pieter HintjensPieter Hintjens

6,66911 gold badge2626 silver badges2929 bronze badges

SO_REUSEPORT was backported to the RHEL6.5 kernel 2.6.32.

answered Jun 15, 2014 at 21:01

Dag WieersDag Wieers

1,93311 gold badge1515 silver badges1111 bronze badges

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.

answered Jul 5, 2016 at 18:16

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4