Se un server riceve poche richieste da parte di clients non conviene averlo attivo continuamente.
E' stato percio' concepito un superserver, di nome inetd che amministra i server normalmente invocati di rado.
All'atto della partenza 'inetd' legge il suo file di configurazione, /etc/inetd.conf e scopre quali sono i server che deve amministrare. Apre quindi il porto ben conosciuto di ciascun server, facendo riferimento al file /etc/services e si mette in ascolto su tutti questi porti.
Quando dalla rete arriva una richiesta per un server amministrato, 'inetd' esegue una chiamata fork() seguita da una chiamata exec() e genera in tale momento il server richiesto.
Tale server apre un porto effimero e quindi gestisce la comunicazione con il client.
Un esempio di una linea di configurazione di /etc/inetd.conf puo' essere:
telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
La linea e' un record di configurazione composto di campi separati da spazio bianco:
vi e' la possibilita' di porre nel sesto campo non il nome dell'eseguibile vero da lanciare, ma quello di un cosiddetto programma wrapper, di sicurezza.
Per esempio la corrispondente linea puo' essere invece:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
Il 'wrapper' /usr/sbin/tcpd consulta i sui files di configurazione che possono riportare liste di indirizzi IP o di nomi di dominio a cui l'uso del servizio non e' concesso. In tal caso il server vero non viene lanciato. Se invece il 'wrapper' concede il permesso di esecuzione del servizio, allora e' il 'wrapper' ad eseguire un exec() del servizio richiesto.
Se il file di configurazione /etc/inetd.conf viene cambiato, per far si' che il processo 'inetd' lo rilegga occorre inviare un segnale di Hangup all'identificativo del processo 'inetd':
kill -HUP <PIDinetd>