2. Configurando inetd

inetd escucha esperando conexiones en ciertos puertos. Cuando una conexión se produce en uno de dichos puertos el super servidor se encarga de de invocar al programa adecuado para satisfacer el servicio.

Una vez arranca inetd, intenta leer su fichero de configuración, que por defecto es /etc/inetd.conf. El formato de este fichero es sencillo y soporta comentarios con #, ignorándose el resto de la linea.

Fragmento de configuración:
# un servicio de ejemplo
ident          stream  tcp     wait    identd  /usr/sbin/identd        identd

Cada linea de configuración consta de una serie de campos separados por espacios o tabuladores. Es necesario especificar todos los campos, que son:
nombre del servicio
tipo de socket
protocolo
espera/no espera[.max]
usuario[.grupo] o usuario[:grupo]
programa servidor
argumentos para el programa servidor

Vamos a estudiar cada uno de los campos.

Nombre del servicio: Este nombre debe estar listado en /etc/services e indica al super-servidor que puerto debe escuchar. En un servidor HTTP como el demonio de ejemplo que veremos más adelante sería 'www'.

Tipo de socket: Aquí puede ponerse uno de los siguientes valores: stream, dgram, raw, rdm, seqpacket; dependiendo del tipo de socket. En el ejemplo se va a emplear el tipo 'stream', que es el que se usa en el protocolo HTTP.

Protocolo: Se trata de un protocolo válido de los listados en /etc/protocols, como por ejemplo tcp o udp. Nuestro demonio va a emplear 'tcp'.

Espera/no espera[.max]: Indica si inetd debe esperar a que termine el proceso encargado de responder a la petición o, por el contrario, ponerse a esperar más peticiones inmediatamente después de ejecutar el programa encargado de atender el servicio. El campo [.max] es opcional e indica cuantas instancias lanzará inetd del proceso en 60 segundos (por defecto 256). En este caso se va a emplear 'nowait' ya que el demonio implementado solo es capaz de procesar una petición a la vez, por lo que necesitará que el super-servidor ejecute una instancia por petición.

Usuario[.grupo] o usuario[:grupo]: Indica el usuario (indicando opctionalmente el grupo) que debe ejecutar el servicio. Esto es muy importante porque, por lo general, emplearemos un usuario con los permisos necesarios para realizar el trabajo, y nada más. En este caso se emplea 'nobody'.

Programa servidor: El programa que se encargará del servicio, incluyendo la path completa.

Argumentos para el programa servidor: Estos son los argumentos que se pasarán al servidor, pasando siempre como primer argumento el nombre del programa. En el demonio de ejemplo no son necesarios argumentos, pero se debe pasar uno, que es el nombre del programa: db-httpd.

Resumiendo, así va a quedar la llamada al demonio db-httpd:
www	stream tcp nowait nobody /usr/local/libexec/db-httpd/db-httpd db-httpd