[kansaipm] Socketについて教えてください

mishima at momo.so-net.ne.jp mishima at momo.so-net.ne.jp
Tue Dec 25 10:14:50 CST 2001


三嶋@難波です。

蛇足ですけど...。

From: Tetsuya Ryuchi <ryuchi at ryuchi.org>
Subject: Re: [kansaipm] Socketについて教えてください 
Date: Tue, 25 Dec 2001 16:53:14 +0900

> > ソケットとセレクトを使ったapacheで動く、cgiプログラムを作っています。 
> > 1週間ほど悩んでいます。何かヒントでもありましたら、よろしく。  
> 
>   うーん、下記のサンプルだと Apache用のCGIでもなければ、モジュールでも
> ない気がします。スタンドアローンのサーバでないですか?  

きっと、Perlで書かれたCGIプログラムがクライアントとして、
スタンドアロンのサーバへconnect しに行くという図式なのでしょう。

>   # ところで select(2) って必要でしたっけ? (^^;

きっと、fork せずに、1個のプロセスで複数のソケットを管理して、
とっかえひっかえ使おうとしているのでしょう。
それなら必要ですよね、select(2)。

> > ID (4とか 5とか連番)が付けられています。クライアント側は、どうすれ
> > ば、 
> > 自分のデータだけを受け取れるのでしょうか。クライアントも、IPアドレスと
> > ポートではないのでしょうか。
> 
>   ?? ID ってなんでしょう? ソケットでは そういう番号は使わない気がしますが

きっと、accept() が返すファイルディスクリプタの番号のことでしょう。
ファイルディスクリプタの番号は、0:stdin, 1:stdout, 2:stderr に続いて
3番以降が振られますよね、たぶんソケットでも。

> > selectを使わず、 forkを使おうとしたら、 waitpidで子プロセスを殺さず、次
> > の 
> > クライアントからの要求のため、acceptの待ちに入っていいのでしょうか。
> 
>   fork(2) を使って あるクライアントからの接続を子に任せて、親は次から次へ
> と来る要求を処理するために accept(2)すればいいです。
>   子が終わるときは 親にシグナルを送って、親がシグナルを受けたら wait して
> やればいいはずです。

えっと、子プロセスが終わると、SIGCHLDのシグナルは自動的に発生するん
でしたっけ。親のほうで、シグナルハンドラを用意すれば良いんですよね。

サンプルが無いかと google で、「waitpid reaper sample」とか検索して
みると ... んー、なぜか Perl のサンプルばかり。
C言語のサンプルは、出て来ませんねえ。
でも、基本的なやり方は参考になるかも。


ところで橋本@神戸さん、具体的に何をするプログラムを
作ろうとされているのでしょうか。



More information about the Kansai-pm mailing list