Los servicios inetd son realmente geniales para aplicaciones que necesitan incorporar datos y actuar con cierto grado de interacción con el usuario. Funciona sobre tcp/udp conectando los datos a un socket de (x) inetd a std {in, out, err}. Las aplicaciones inetd también funcionan bien con tcpwrappers para mejorar la seguridad a través de los archivos de políticas del sistema y la ACL.
Así que sí, escribiría su aplicación como si fuera una aplicación de consola, ya que en realidad es una aplicación de consola. Solo piense en inetd como un proxy inverso transparente de la red a las entradas de su aplicación.
Un consejo, escriba su código para manejar las señales del proceso correctamente y si necesita interactuar con otro proceso en el sistema, use unix sockets/fifo para eso.
Además, no intente escribir una aplicación que transmita una gran cantidad de datos a la vez o que necesite muchas conexiones. La escalabilidad es un problema ya que inetd se convierte en un cuello de botella, por eso Apache y Sendmail dejaron de admitir inetd y sentarse como aplicaciones mono en su lugar. HTTP se adapta mejor a este rol y una secuencia de comandos fastcgi (o insertar un marco favorito) con nginx funciona mejor para ese caso de uso.
Un buen ejemplo de una inetd sería:
lock = Mutex.new
trap :HUP { #log the connection and cleanup }
trap :USR1 { lock.synchronize do #stuff; end }
trap :TERM { #clean up }
trap :KILL { #clean up and die with error codes }
puts "App name - version"
loop do
('%s> ' % Console.prompt).display
input = gets.chomp
command, *params = input.split /\s/
case command
when /\Ahelp\z/i
puts App.help_text
when /\Ado\z/i
Action.perform *params
when /\Aquit\z/i
exit
else
puts 'Invalid command'
end
end
exit
Editar su /etc/services
de incluir su aplicación como esta: puerto miaplicacion #/proto
y una su aplicación a /etc/inetd.conf
(o xinetd. d) de esta manera: myapp stream tcp6 nowait myappuser/ruta/a/myapp myapp -arg_flags
¿Hay alguna muestra, C++ o C o de otro modo? –
@Quandary: actualizado. – cHao
Gracias, realmente parece muy simple.Realmente no hay más? Entonces, si un cliente se conecta con el puerto, recibe "cuál es tu nombre", envía su nombre y vuelve "Hola,". Y supongo que el tiempo de espera lo maneja xinetd. Muy gracioso de hecho. Creo que tengo que echar un vistazo a la programación de xinetd, hace que un servidor se vea tan simple como un programa de consola de un solo cliente. –