返信

まりこさん,こんにちわ。

プログラマを引退して年月が経つので,記憶が風化している部分もありますが...

acceptの前でも,listenが完了していれば,ソケットの状態は接続待ちになるので,
その時点でSYNパケットを受け付けることはできるっていうことじゃないのかしら。
つまり,acceptは新しい接続に対応して作られるソケットを
アプリケーションに渡すために使うものなので,acceptしなくても,
listenするだけでソケットは接続可能な状態になるということだと思います。
そして,listenしたところにSYNが来たら,
SYN+ACK,ACKと続けて,接続動作を完了し,
接続したコネクション用に新しくソケットができ,
この新しくできたソケットのディスクリプタを受け取る動作がacceptだということで。

記憶が風化しているので,自信はないのですが,そんな感じだったと思います。
だから,このような事態が起こるんじゃないかしら。
間違っていたら,指摘してください。 > 皆様

それから,ソケットに対する操作はすべてディスクリプタによって識別するので,
ソケットに対する操作とプロセスをforkするかどうかは直接関係ないはずです。
forkしなくても,別のディスクリプタを使ってsocket,bind,listen,acceptすれば,
一つのプロセスで複数通信することも可能です。

この辺,詳しく知りたかったら,
デバガでプログラムをステップ実行しながら,
LANアナライザでパケットの動きを追いかけながら,
netstatでソケットの状態も随時見てみるとよいと思います。

<code>Only

  • 使用できるHTMLタグ: <code>
  • 文字で図を描く場合に<code>と</code>で囲んでください
画像認証
機械的なスパムメッセージ送信を防止するために画像認証を設けています。ご協力ください。
Image CAPTCHA
Enter the characters shown in the image.