小目次

目次にもどる
ープログラム
ー実行結果
ーinetd使用/未使用時における実装上の違い

課題3:inetdを使用しないサーバプログラムの作成

課題2のサーバプログラム(server.c)はinetdから起動するものであるが、inetdを使用せずに同じ動作をするデーモン型のサーバプログラムを作成し、実行結果を示すとともに、inetdを使用するサーバプログラムとそうでないものとの実装上の違いを説明せよ。


プログラム

myserver.cのソースコード(別ウィンドウ)
myclient.cのソースコード(別ウィンドウ)
関数については関数メモを参照
myserver.c(デーモン部分のみ抜粋) 補足
//(1)5683番ポートを使って接続をまつ
unsigned short port = 5683;
int servsoc; 
int hostsoc;
  
struct sockaddr_in srcAddr;
struct sockaddr_in dstAddr;
int dstAddrSize = sizeof(dstAddr);
  
memset(&srcAddr, 0, sizeof(srcAddr));
srcAddr.sin_port = htons(port);
srcAddr.sin_family = AF_INET;
srcAddr.sin_addr.s_addr = htonl(INADDR_ANY);

servsoc = socket(AF_INET, SOCK_STREAM, 0);

bind(servsoc, (struct sockaddr *) &srcAddr, sizeof(srcAddr));

listen(servsoc, 1);

printf("now waiting for client connect\n");

hostsoc = accept(servsoc, (struct sockaddr *)&dstAddr, &dstAddrSize);
printf("Connected from %s\n", inet_ntoa(dstAddr.sin_addr));
(1)課題5のプログラムを5600~5700修正して調べてみた
%./scan_port
Address = "127.0.0.1" Portscan started..
Port no. 5680 is open
Port no. 5683 is open
Portscan find them.

関数については関数メモを参照
ちなみに、「デーモン」とは「メモリに常駐して様々なサービスを提供するソフトウェア」のこと。


実行結果

inetdを使用しないため、あらかじめサーバを起動しておかなければならない。
ターミナル1 ターミナル2
%./myserver 
now waiting for client connect
Connected from 191.255.248.16
%./myclient 
Connected.
Input Keyword = warning: this program uses gets(), which is unsafe.
yama
Keyword = [yama] / Data = [kawa]

Input Keyword = 123 
Keyword = [123] / Data = [456]

Input Keyword =


inetd使用/未使用時における実装上の違い

inetd使用 inetd未使用
inetdがポートを見張り、接続があった時だけサーバを起動してクライアントと接続する
ただし、inetdがサーバを起動するまでにオーバーヘッドが起こる(時間がかかる)
サーバが常時起動していて、ポートを見張っているのでオーバーヘッドが少ない
ただし、サーバが起動し続けるのでリソースを消費してしまう。
上にもどる
目次にもどる