Como é queinetdtransferir o controle para o serviço, abaixo está meu entendimento
- inetd escuta em todas as portas mencionadas em
/etc/inetd.conf
- Se um cliente fizer uma solicitação para uma das portas que o inetd escuta, então o inetd transfere o controle dessa solicitação para um serviço, girando-o como um processo filho, olhando
/etc/inetd.conf
- Ele atua como multiplexador.
Minha dúvida está abaixo
- Como a solicitação é transferida para o processo filho (respectivo daemon de serviço)?
- A conexão já é feita na porta pelo inetd, então o processo filho não pode acessar aquela porta novamente até que o inetd libere essa porta. Se o inetd liberar essa porta, a conexão do cliente existente será interrompida (corrija-me se meu entendimento estiver errado).
Responder1
inetd
escuta em uma porta e, em seguida, conecta-a ao stdin, stdout e stderr do serviço que irá processá-la.
Como isso acontece
- Após
accept
a conexão, ele possui um soquete em um de seusfd
s. - Em seguida, ele
dup
licaráfd
to0
,1
,e2
. - Será então
fork
. Todos os descritores de arquivo permanecerão abertos, a menos que alguma ação seja tomada para fechá-los (portanto, 0,1 e 2 permanecem abertos). - O processo filho então chamará
exec
,fd
s ainda permanecerão abertos. - O serviço agora está sendo executado com o cliente remoto conectado a stdin (0), stdout (1) e stderr (2).
- O serviço só precisa saber que o cliente está nesses descritores de arquivo, e não fazer isso
listen
por conta própria.
(Fiz algumas pesquisas, mas não consigo inetd
dizer ao programa de serviço que ele foi chamado por inetd
. Eu esperaria um argumento de linha de comando.)
Responder2
Considere ações como esta:
[pai]
sfd = socket(), listen(), connect(), fork();
Para outros descritores que não devem ser herdados por processos filhos,
close()
ou previamente definidos como FD_CLOEXEC;
after fork
, o pai pode fechar este sfd
[criança]
execve();
cópia do descritor de soquete conectado herdado, pode ser usado para E/S do cliente
Responder3
Está bem explicado emProgramação Que-Linux-Socketsob a seçãoThe Design Parameters of inetd Servers