¿Cómo lo hace?

¿Cómo lo hace?

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

inetdescucha en un puerto y luego lo conecta a stdin, stdout y stderr del servicio que lo procesará.

¿Cómo lo hace?

  • Después de acceptrealizar la conexión, tiene un enchufe en uno de sus fdlados.
  • Luego duplocalizará fda 0, 1y 2.
  • 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á execy fdaú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 listenpropio.

(Hice algunas búsquedas, pero no veo cómo inetddecirle 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

información relacionada