2011-07-19 13 views

答えて

1

プロセスは「起床」されません。accept(2)に電話する必要があります。ここで何が起こっているのですか?

あなたは、あなたが「リスニング状態」にソケットを設定し

s = socket(....); 

などA構造体、カーネルは多くのリソースを割り当てますソケットを作成します。カーネルはこれを認識し、構造体に1つか2つのフラグを反転します。

listen(s, -1); 

fork(2)となりました。ファイルディスクリプタは2つあります。接続が到着しました。誰がそれを手に入れる?

acceptを最初に呼び出した人は誰でもです。両者が現在acceptを待っている場合、その注文を決定することはできません。

接続が到着すると、カーネルはそれを「保留中の接続」のキューに追加します。そのファイルディスクリプタを持つプロセスが開かれたらaccept(2)、カーネルはキューから1つの接続を削除し、それを呼び出し元に渡します(新しいファイルディスクリプタを返します)。

結論として、子プロセスがファイル記述子を継承すると、単に接続を受け入れるチャンスが得られます。

1

いくつかのプロセスは同じソケットのaccept()にできます。接続が到着すると、OSによっては、1つのプロセスまたはすべてのプロセス(群れの雷)を起動する可能性がありますが、新しい接続を確立するには1つのプロセスしか成功しません。

関連する問題