inetd 서비스는 데이터를 가져 와서 사용자와의 어느 정도의 상호 작용을 필요로하는 앱에서 정말 유용합니다. IT는 소켓을 (x) inetd에서 std (in, out, err)로 파이핑하여 tcp/udp를 처리합니다. inetd 응용 프로그램은 시스템 정책 파일과 ACL을 통해 tcpwrappers와 함께 보안을 강화합니다.
그래서 콘솔 앱과 같이 앱을 작성합니다. 실제로는 콘솔 앱이므로 작성하십시오. inetd는 네트워크에서 앱 입력에 이르는 투명 역방향 프록시라고 생각하면됩니다.
조언이 있으시면 프로세스 신호를 올바르게 처리 할 코드를 작성하고 시스템의 다른 프로세스와 상호 작용해야 할 경우 unix socket/fifo를 사용하십시오.
또한 많은 양의 데이터를 한 번에 스트리밍하거나 많은 연결이 필요한 앱을 작성하지 마세요. 확장 성은 inetd가 병목이되는 문제이므로 Apache와 Sendmail이 inetd에 대한 지원을 중단하고 대신 모노 응용 프로그램으로 자리 매김하는 이유입니다. HTTP는이 역할에 더 잘 부합하며 nginx로 fastcgi (또는 선호하는 프레임 워크 삽입) 스크립트는 해당 사용 사례에 가장 잘 작동합니다.
inetd를위한 좋은 예는 다음과 같습니다
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
을 편집 /etc/services
이 같은 응용 프로그램을 포함합니다 : myapp와 포트 번호/프로토
및 /etc/inetd.conf
(또는 xinetd가에 응용 프로그램을 추가 할 수 있습니다. d)는 다음과 같습니다 : myapp stream tcp6 nowait myappuser/path/to myapp myapp -arg_flags
샘플이 있습니까, C++ 또는 C입니까? –
@Quandary : updated. – cHao
감사합니다. 실제로 매우 간단하게 보입니다.정말 그게 더 많지 않아? 따라서 클라이언트가 무엇이든 포트에 연결하면 "이름이 무엇입니까?"라는 메시지가 수신되고 이름이 전송되며 다시 ""이됩니다. 그리고 시간 초과가 xinetd에 의해 처리된다고 가정합니다. 정말로 우스운 이야기. xinetd 프로그래밍을 살펴 봐야한다고 생각합니다. 서버를 단일 클라이언트 콘솔 프로그램처럼 단순하게 만듭니다. –