我想知道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和PORT NUMBER
答案 0 :(得分:8)
这个选项在内核3.9中完成,请参阅此git commit
答案 1 :(得分:5)
来自/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 */
嗯。看起来它是未定义的或在折旧的最后阶段。
以下是a post on KernelTrap所说的内容:
在Linux上,SO_REUSEADDR提供了SO_REUSEPORT在BSD上提供的大部分功能。
无论如何,创建多个TCP侦听器绝对没有意义 多个线程可以在同一个侦听器上同时接受() -
RémiDenis-Courmont
http://www.remlab.net/
答案 2 :(得分:4)
试试这个:
#ifdefined (SO_REUSEPORT)
... set this option
#endif
如果您需要设置某些平台(一个OS / X),则需要设置此平台。将多个UDP侦听器绑定到一个端口。
答案 3 :(得分:4)
SO_REUSEPORT被反向移植到RHEL6.5内核2.6.32。
答案 4 :(得分:3)