Les services inetd sont vraiment parfaits pour les applications uniques qui ont besoin de prendre des données et d'agir avec un certain degré d'interaction avec l'utilisateur. Il fonctionne sur TCP/UDP en transmettant les données viva un socket de (x) inetd à std {in, out, err}. Les applications inetd fonctionnent également bien avec tcpwrappers pour améliorer la sécurité par le biais de fichiers de règles système et d'ACL.
Alors oui, vous écrivez votre application comme une application de console, car en réalité, il s'agit d'une application de console. Pensez à inetd comme un proxy inverse transparent du réseau aux entrées de votre application.
Un mot de conseil, écrivez votre code pour gérer les signaux de processus correctement et si vous avez besoin d'interagir avec un autre processus sur le système, utilisez unix sockets/fifo pour cela. De même, n'essayez pas d'écrire une application qui diffuse beaucoup de données en même temps ou qui nécessite un grand nombre de connexions. L'évolutivité est un problème car inetd devient un goulot d'étranglement, c'est pourquoi Apache et Sendmail ont abandonné le support pour inetd et s'installent comme applications mono à la place. HTTP correspond mieux à ce rôle et un script fastcgi (ou insert framework favori) avec nginx fonctionne mieux pour ce cas d'utilisation.
Un bon exemple pour un inetd serait:
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
Modifier votre /etc/services
pour inclure votre application comme ceci: port myapp #/proto
et ajoutez votre application à /etc/inetd.conf
(ou xinetd. d) comme ceci: myapp flux tcp6 nowait myappuser/chemin/vers/myapp myapp -arg_flags
Y at-il un échantillon, C++ ou C ou autre? –
@Quandary: mis à jour. – cHao
Merci, semble en effet très simple.Il n'y en a vraiment pas plus? Donc, si un client se connecte au port quel qu'il soit, il reçoit "quel est votre nom", envoie son nom, et revient "Hi". Et je suppose que le timeout est géré par xinetd. Très drôle en effet. Je pense que je dois jeter un oeil à la programmation xinetd, cela donne l'apparence d'un serveur aussi simple qu'un programme de console mono-client. –