2010-07-16 10 views
14

Quiero saber si la opción está habilitada en SO_REUSEPORT Linux 2.6 o no ??SO_REUSEPORT en Linux

Si trato de usarlo y compilar el código consigo error siguiente

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

El uso de la opción anterior creo que puedo unir dos tomas diferentes a misma IPADRESS y número de puerto

Respuesta

5

De /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. Parece que no está definido o está en las últimas etapas de depreciación.

Esto es lo a post on KernelTrap dice:

En Linux, SO_REUSEADDR proporcionan la mayor parte de lo que ofrece SO_REUSEPORT en BSD.

En cualquier caso, no hay absolutamente ningún punto en la creación de múltiples oyentes TCP.
múltiples hilos pueden aceptar() en la misma escucha - al mismo tiempo.
-
Rémi Denis-Courmont
http://www.remlab.net/

+0

no estoy seguro de lo que hace "SO_REUSEPORT" lo hace en BSD ... pero he oído vagamente que ni siquiera yo puedo unir dos zócalos diferentes con la misma Fuente IPADRESS y puerto de origen .. – codingfreak

4

Prueba esto:

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

Algunas plataformas (OS/X para uno) necesita esta fijarse si estás por ejemplo, vinculando múltiples oyentes UDP a un puerto.

3

SO_REUSEPORT fue portado al kernel 2.6.32 RHEL6.5.

3

Se agregó durante el ciclo 3.9 en una serie de parches de Tom Herbert, como se puede ver en here, para admitir mejor los servidores web multiproceso.

El propio parche se puede encontrar here si desea integrar SO_REUSEPORT en una versión más antigua de núcleo.

Y sí, puede usar SO_REUSEPORT para vincular un socket a la misma dirección y puerto que otra conexión, siempre que la conexión inicial también use SO_REUSEPORT (y cualquier otra conexión que comparta la dirección de origen y el puerto). Esto se hace para evitar el secuestro de puerto por aplicaciones deshonestas.