[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