En Linux, ¿me es posible abrir un socket y pasar el socket a otro proceso? En caso afirmativo, ¿puede decirme dónde puedo encontrar un ejemplo?¿Puedo abrir un socket y pasarlo a otro proceso en Linux
Gracias.
En Linux, ¿me es posible abrir un socket y pasar el socket a otro proceso? En caso afirmativo, ¿puede decirme dónde puedo encontrar un ejemplo?¿Puedo abrir un socket y pasarlo a otro proceso en Linux
Gracias.
Sí se puede, usando sendmsg()
con SCM_RIGHTS de un proceso a otro:
SCM_RIGHTS
- Enviar o recibir un conjunto de descriptores de archivos abiertos de otro proceso . La porción de datos contiene una matriz de enteros de los descriptores de archivos. Los descriptores de archivos pasados se comportan como aunque se han creado condup(2)
.
http://linux.die.net/man/7/unix
Ese no es el uso típico sin embargo. Más común es cuando un proceso hereda los sockets de su padre (después de 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 demonio es típico aquí:
http://www.steve.org.uk/Reference/Unix/faq_8.html#SEC88
de desplazamiento hacia abajo para anular process()
.
A menos que no desee bifurcar un nuevo proceso para cada solicitud, simplemente pase la solicitud a un conjunto de trabajadores . – magiconair
Esto parece específico para AF_UNIX. ¿Se puede hacer esto para los sockets TCP? –
@AdrianRatnapala: no, no puede enviar un socket (o identificador de archivo) sobre TCP a otra máquina, deben permanecer dentro del mismo kernel. Entonces, el canal sobre el cual se comunica debe ser AF_UNIX, pero el manejador de archivo que transfiere puede ser, por supuesto, un socket TCP. – Zarat
posible duplicado de [¿Puedo compartir un descriptor de archivo en otro proceso en Linux o son locales para el proceso?] (Http://stackoverflow.com/questions/2358684/can-i-share-a-file- descriptor-to-another-process-on-linux-or-are-they-local-to-t) – Gilles