実行されている間 inetd は定められたインターネットソケットを監視し、接続要求を待つ。 監視しているソケットに対して接続要求が出されると、 そのソケットに対応したサービスを判定し、 サービスを提供するプログラムを起動する。 サービスプログラムが完了すると、 inetd は再びソケットの監視を行なう。 後述するような例外もある。 inetd を用いれば 1 つのデーモンで 複数のサービスプログラムを起動することができるので、 システムの負荷を軽減することができる。
サービス名[@ホスト名] ソケットタイプ プロトコル wait/nowait[.max] ユーザー名[.グループ名] サーバープログラム名 サーバープログラム引き数
Sun-RPC ベースのサービスを記述する場合には、次のエントリを記述する。
サービス名/バージョン[@ホスト名] ソケットタイプ RPC/プロトコル wait/nowait[.max] ユーザー名[.グループ名] サーバープログラム名 サーバープログラム引き数
サービス名 のエントリには、 /etc/services ファイルに記述されているサービス名が記述される。 ``内部'' サービス (後述) については、 名前としてそのサービスの公式名 (すなわち /etc/services 内の最初のエントリ) を指定 しなければならない。 Sun-RPC ベースのサービスを指定するためには、このフィールドは /etc/rpc に書かれた有効な RPC サービス名でなければならない。 ``/'' の右の部分が RPC のバージョン番号である。 バージョン番号は、数字もしくは、バージョンの範囲 (レンジ) で指定する。 範囲を指定する場合は低い番号から高い番号を指定する。 たとえば ``rusers/1-3'' のように記述する。
サービス名に @hostname という形式の文字列が追加された場合、 inetd は hostname に対応する特定の IP アドレスからの接続についてのみ、 サービスポートをバインドさせる (全てのアドレスからの接続は listen しない)。 異なるアドレスに対して使用したいだけ指定できるので、 ``仮想ホスト''サービスを設定できる。 望むだけの数の特定のアドレスを監視できるが、 カーネルによる制限によって、 inetd がそのポートを特定のアドレスに対して (あるいは同時に一般のアドレスに対して) 監視するのが禁止されることもある。 hostname はローカルシステムのインターフェースに関連づけられた、 解決可能なホスト名または IP アドレスにすべきである。
ソケットタイプ のエントリは、 ``stream'' ``dgram'' ``raw'' ``rdm'' ``seqpacket'' のいずれかで、それぞれソケットが stream, datagram, raw, reliably delivered message, sequenced packet socket である場合に対応している。
プロトコル のエントリには、 /etc/protocols に記述されている有効なプロトコル名が記述される。 例えば ``tcp'' や ``udp'' などである。 RPC ベースのサービスの場合、 ``rpc/tcp'' や ``rpc/udp '' のような指定になる。
wait/nowait エントリは、datagram ソケットにのみ適用できる (その他のソケットでは、この場所は ``nowait'' でなければならない)。 もし datagram サーバーが相手に接続したときにソケットを解放するなら、 inetd はソケットに対するメッセージをさらに受けることができる。 このようなサーバーは ``マルチスレッド'' サーバーと呼ばれ、 ``nowait'' エントリを指定しなければならない。 入って来る全ての datagram を処理し、 時間切れまで動作する datagram サーバーは、 ``シングルスレッド'' サーバーと呼ばれ、 ``wait'' エントリを指定しなければならない。 comsat(8), (biff(1) ) talkd(8) は後者のタイプの datagram サーバーの例である。 tftpd(8) は例外である; これは疑似接続を確立する datagram サーバーである。 競合を避けるために ``wait'' が指定されなければならない; サーバーは最初のパケットを読み込み、新たなソケットを作成し、 inetd が新たなサーバーを起動するような接続要求をチェックできるように、 fork して終了する。 オプションのサフィックス (接尾辞) ``max'' ( ``wait'' または ``nowait'' からドット``.''で分けられる) は、60 秒の間に最大いくつのサーバーが inetd から起動できるかを指定する。 省略された場合の、 ``max'' のデフォルトは 40 である。
user エントリには、サーバーを実行するユーザー名を書く。 これによりサーバーを root よりも低い権限で実行できる。 ユーザー名に続いてドット``.'' を付加して、 その後ろにグループ名を指定することができる。 これによりサーバーを password ファイルで指定される (プライマリの) グループ ID とは違うグループ ID で実行できる。 グループ名が指定され、ユーザーが root 以外だった場合は、 そのユーザの補助グループも (グループアクセスリストに) 設定されることになる。
サーバープログラム名 のエントリには、ソケットに要求があったとき inetd が起動し、当該エントリのサービスを提供する サーバープログラムのパス名を指定する。 inetd 内にすでに実装されているサービスを提供する場合には、サーバープログラムとして ``internal'' を指定する。
サーバープログラム引数 のエントリには、サーバーを起動する際の引数を、 サーバープログラムの起動文字列である argv[0] を含めて記述する。 inetd 内に実装されているサービスを提供する場合には、サーバープログラム引数として ``internal'' を指定する。
SIGHUP を受けとると、 inetd は、設定ファイルを再度読み込む。 設定ファイルを再読み込みするときに、サービスを追加・削除・変更できる。 inetd はファイル /var/run/inetd.pid を作成し、そこにプロセス ID を記録する。