next up previous
次へ: 課題4:HTTPクライアントの作成 上へ: 課題3:inetdを使用しないサーバプログラムの作成 戻る: 実行結果

inetdを使用するサーバプログラムとそうでないものとの実装上の違い

inetdを使用する場合、課題2でサンプルプログラム(1)を実行する際に行ったように/etc/services、/etc/inetd.confにサービスネーム、プログラムを登録することで、クライアント側からの接続欲求があった際にinetdがソケットを作成し、clientからの接続を受け入れる。つまり、サーバ側のプログラムにはソケットを作成するための記述は必要ない。readやwriteを行う場合の第一引数には0を指定する。クライアント側のプログラムではgetservbyname関数を使用し、SERVICE_NAME、PROTOCOLにマッチするものを/etc/servicesから探し、servent構造体を取得する。servent構造体のメンバs_portにサーバ側プログラムで利用されるport番号が格納されているので、それを用いてconnectを行う。

一方デーモン型のプログラムでは、サーバ側のプログラムではソケットを作成し、bind、listen、acceptを行う必要がある。クライアント側のプログラムでは使用するport番号を明示的に指定しなければならない。



Shimabukuro Takuya 平成18年12月9日