Inetd
以下のコードはC言語で書かれた単純なinetdサービスの一例である。オプションでファイル名を引数として受け取り、それをログファイル名とし、そのソケット経由で送られてきた文字列を全てそのログファイルに記録する。これは例えば、異なるマシン上の複数のプロセスからメッセージを受け付けて、分散コンピューティングにおけるロギングサービスを実現するものである。inetdサービスをロギングメッセージ受信に使うことで、全てのマシンがメッセージを1つのマシンに送り、単一のログファイルにそれらを格納できる。
この場合、全メッセージを単一のファイルに記録したいので、サービスは1つのインスタンスのみで全要求に応えるようにしたい。従って、使うプロトコルとしてはUDPが適切である。まず、使っていないポート番号を選択する。ここでは9999が使われていなかったものとし、それを使うことにする。/etc/services には次のような一行が書かれる。
そして/etc/inetd.confには次のように書かれる。
inetdはセキュリティへの配慮が乏しいため、最近では代替実装としてxinetd、rlinetd、ucspi-tcp、systemd などがよく使われている。Linuxの対応はディストリビューションによって様々である。macOSは(Mac OS X v10.2 以降)xinetdを使っていた。Mac OS X v10.4では、inetdの機能はlaunchdに統合されている。
inetdが提供するサービスは完全に切捨て可能である。これは、マシンを単機能サーバとする場合によく使われるようになりつつある。例えば、HTTPサーバは、httpdだけを起動するよう設定し、他のポートを全くオープンしないようにできる。ファイアウォール専用マシンは全くサービスを起動しないようにできる。
inetdは、FTP、POP3、telnet といったインターネットサービスが使うポート番号を(指定されて)監視する。監視対象のポートにTCPパケットあるいはUDPパケットが届くと、inetdは対応するサーバプログラムを起動し、コネクションを制御させる。この方式では、必要にならない限りサービスが起動されないため、メモリ利用効率がよい。さらに、個々のサーバデーモンはソケットが標準入出力および標準エラー出力にフックされた状態で起動されるため、ネットワークに関するコードを必要としない。トラフィックの多いHTTPやPOP3などのプロトコルでは、直接トラフィックを受け付ける専用サーバの方が望ましい(頻繁にサーバプロセスを起動する無駄を避けるため)。