¿Puedo abrir un socket y pasarlo a otro proceso en Linux?

En Linux, ¿es posible para mí abrir un socket y pasar el socket a otro proceso? En caso afirmativo, ¿puede decirme dónde puedo encontrar un ejemplo?

Gracias.

Sí, puedes, usando sendmsg() con SCM_RIGHTS de un proceso a otro:

SCM_RIGHTS : envía o recibe un conjunto de descriptores de archivo abiertos de otro proceso. La porción de datos contiene una matriz de enteros de los descriptores de archivos. Los descriptores de archivo pasados ​​se comportan como si se hubieran creado con dup(2) .

http://linux.die.net/man/7/unix

Sin embargo, ese no es el uso típico. Más común es cuando un proceso hereda los sockets de su padre (después de un fork() ). Todos los identificadores de archivo (incluidos los sockets) no cerrados estarán disponibles para el proceso secundario. Entonces, el proceso secundario hereda los sockets de los padres.

Un proceso de servidor que escucha las conexiones se llama daemon. Esto usualmente se bifurca en cada conexión nueva, generando un proceso para manejar cada nueva solicitud. Un ejemplo del daemon típico está aquí:

http://www.steve.org.uk/Reference/Unix/faq_8.html#SEC88

Desplácese hacia abajo para anular el process() .