FC Lab logo

inetdを使ったサーバ

このページではinetdをつかったサーバの作り方を説明します

inetdとは

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なのです。

設定方法

  1. /etc/servicesに以下の内容を追加します.

    netadd	7070/tcp
    
    これは7070番ポートを使う場合です。 他のポートを使う場合にはポート番号を変更してください。

  2. /etc/inetd.confに以下の内容を追加します.

    netadd stream tcp nowait root /home/takeshi/add add
    
    この例では実行ファイルが/home/takeshi/addにあることを 想定していますが、別のパスにある場合はここを変更してください。

  3. inetdを再起動します

    # kill -HUP 'INETDのプロセスID'
    
    プロセスIDはpsコマンドなどで確認してください。

これで7070番ポートに接続してaddを呼び出す設定がなされました。

動作テスト

近くの適当なマシンからtelnetで次のように接続してみてください。

% telnet panda 7070
8 7
8+7=15
ここではpandaというホストを指定していますが、 実際にテストするときには上のinetdの設定を行ったホストを指定してください

このようにネットワークを介して接続して、プログラムを実行できれば 設定はうまくいっています。

 
ご質問ご要望はinfo@fc-lab.com へどうぞ