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_
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/
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.
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.
SO_REUSEPORT was backported to the RHEL6.5 kernel 2.6.32.
this options was done in kernel 3.9, see this git commit
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c617f398edd4db2b8567a28e899a88f8f574798d