inetdはスーパーサーバ(super server)とも呼ばれますが, ポートを監視して,接続要求があった時に、そのサーバプログラムを 起動して,それをクライアントと接続するプログラムです. これによりいくつものデーモンが常に動いている必要がなくなり、 必要な時にだけ動作するため効率がよくなります。
inetdは標準入出力をソケットにパイプしてくれるので、 サーバプログラムの開発の際に特にネットワークプログラムで あることを意識する必要はなく、普通の標準入出力を使う プログラムを記述するだけでサーバを作ることができます。 例えば次のようなプログラムを作ってみてください. main() { int a,b scanf("%d %d",&a,&b) printf("%d+%d=%d\n",a,b,a+b); } これは足し算をするプログラムです。 普通はこのファイル(以下の例ではadd.c)をコンパイルして シェル上で実行して使います. % cc -o add add.c % ./add 3 5 3+5=8 これをネットワークから接続するようにするのがinetdなのです。
例えば次のようなプログラムを作ってみてください.
main() { int a,b scanf("%d %d",&a,&b) printf("%d+%d=%d\n",a,b,a+b); }
% cc -o add add.c % ./add 3 5 3+5=8
/etc/servicesに以下の内容を追加します. netadd 7070/tcp これは7070番ポートを使う場合です。 他のポートを使う場合にはポート番号を変更してください。 /etc/inetd.confに以下の内容を追加します. netadd stream tcp nowait root /home/takeshi/add add この例では実行ファイルが/home/takeshi/addにあることを 想定していますが、別のパスにある場合はここを変更してください。 inetdを再起動します # kill -HUP 'INETDのプロセスID' プロセスIDはpsコマンドなどで確認してください。 これで7070番ポートに接続してaddを呼び出す設定がなされました。
netadd 7070/tcp
netadd stream tcp nowait root /home/takeshi/add add
# kill -HUP 'INETDのプロセスID'
近くの適当なマシンからtelnetで次のように接続してみてください。 % telnet panda 7070 8 7 8+7=15 ここではpandaというホストを指定していますが、 実際にテストするときには上のinetdの設定を行ったホストを指定してください このようにネットワークを介して接続して、プログラムを実行できれば 設定はうまくいっています。
% telnet panda 7070 8 7 8+7=15
このようにネットワークを介して接続して、プログラムを実行できれば 設定はうまくいっています。