Cómoinetdtransferir el control al servicio, a continuación se muestra mi entendimiento
- inetd escucha en cada puerto mencionado en
/etc/inetd.conf
- Si un cliente realiza una solicitud a uno de los puertos que escucha inetd, entonces inetd transfiere el control de esa solicitud a un servicio girándolo como un proceso secundario mirando
/etc/inetd.conf
- Actúa como multiplexor.
mi duda esta abajo
- ¿Cómo se entrega la solicitud al proceso secundario (demonio de servicio respectivo)?
- Inetd ya realizó la conexión en el puerto, por lo que el proceso secundario no puede volver a ese puerto hasta que inetd lo libere. Si inetd libera ese puerto, entonces se cancelará la conexión del cliente existente (corríjame si no entiendo bien).
Respuesta1
inetd
escucha en un puerto y luego lo conecta a stdin, stdout y stderr del servicio que lo procesará.
¿Cómo lo hace?
- Después de
accept
realizar la conexión, tiene un enchufe en uno de susfd
lados. - Luego
dup
localizaráfd
a0
,1
y2
. - Entonces será así
fork
. Todos los descriptores de archivos permanecerán abiertos, a menos que se realice alguna acción para cerrarlos (por lo que 0,1 y 2 permanecerán abiertos). - El proceso hijo luego llamará
exec
yfd
aún permanecerá abierto. - El servicio ahora se está ejecutando con el cliente remoto conectado a stdin (0), stdout (1) y stderr (2).
- El servicio solo necesita saber que el cliente está en estos descriptores de archivos y no hacer uno
listen
propio.
(Hice algunas búsquedas, pero no veo cómo inetd
decirle al programa de servicio que fue llamado por inetd
. Esperaría un argumento de línea de comando).
Respuesta2
Considere acciones como esta:
[padre]
sfd = socket(), listen(), connect(), fork();
Para otros descriptores que no deberían ser heredados por procesos secundarios,
close()
o que previamente no deberían establecerse en FD_CLOEXEC;
after fork
, el padre podría cerrar este sfd.
[niño]
execve();
copia del descriptor del socket conectado heredado, puede usarse para E/S del cliente
Respuesta3
Está claramente explicado enQue-Linux-Socket-Programaciónbajo la secciónThe Design Parameters of inetd Servers