I servizi inetd sono davvero grandiosi per le app one off che devono acquisire dati e agire con un certo grado di interazione con l'utente. Funziona su tcp/udp convogliando i dati in viva un socket da (x) inetd a std {in, out, err}. le app inetd funzionano bene anche con gli tcpwrapper per garantire la massima sicurezza dei file di policy di sistema e ACL.
Quindi sì, dovresti scrivere la tua app come un'app per console in quanto in realtà è un'app per console. Basti pensare a inetd come proxy inverso trasparente dalla rete agli input della tua app.
Una parola di consiglio, scrivi il tuo codice per gestire correttamente i segnali di processo e se hai bisogno di interagire con un altro processo sul sistema usa unix sockets/fifo per quello.
Inoltre, non provare a scrivere un'app che esegue lo streaming di molti dati contemporaneamente o richiede molte connessioni. La scalabilità è un problema dato che inetd diventa un collo di bottiglia, questo è il motivo per cui Apache e Sendmail hanno abbandonato il supporto per inetd e si sono seduti come app mono. HTTP si adatta meglio a questo ruolo e uno script fastcgi (o insert framework preferito) con nginx funziona meglio per quel caso d'uso.
Un buon esempio di un inetd sarebbe:
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
Modificare il /etc/services
per inserire la tua app come questo: porta myapp #/proto
e aggiungere la vostra applicazione per /etc/inetd.conf
(o xinetd. d) in questo modo: myapp stream tcp6 nowait myappuser/percorso/a/myapp myapp -arg_flags
fonte
2012-10-07 09:44:29
Esiste un campione, C++ o C o altro? –
@Quandario: aggiornato. – cHao
Grazie, sembra davvero molto semplice.Non c'è davvero di più? Quindi, se un client si connette a qualsiasi porta, riceve "qual è il tuo nome", invia il suo nome e torna "Ciao". E suppongo che il timeout sia gestito da xinetd. Davvero molto divertente. Penso di dover dare un'occhiata alla programmazione xinetd, rende un server semplice come un programma per console single-client. –