まりこさん,こんにちわ。
プログラマを引退して年月が経つので,記憶が風化している部分もありますが...
acceptの前でも,listenが完了していれば,ソケットの状態は接続待ちになるので, その時点でSYNパケットを受け付けることはできるっていうことじゃないのかしら。 つまり,acceptは新しい接続に対応して作られるソケットを アプリケーションに渡すために使うものなので,acceptしなくても, listenするだけでソケットは接続可能な状態になるということだと思います。 そして,listenしたところにSYNが来たら, SYN+ACK,ACKと続けて,接続動作を完了し, 接続したコネクション用に新しくソケットができ, この新しくできたソケットのディスクリプタを受け取る動作がacceptだということで。
記憶が風化しているので,自信はないのですが,そんな感じだったと思います。 だから,このような事態が起こるんじゃないかしら。 間違っていたら,指摘してください。 > 皆様
それから,ソケットに対する操作はすべてディスクリプタによって識別するので, ソケットに対する操作とプロセスをforkするかどうかは直接関係ないはずです。 forkしなくても,別のディスクリプタを使ってsocket,bind,listen,acceptすれば, 一つのプロセスで複数通信することも可能です。
この辺,詳しく知りたかったら, デバガでプログラムをステップ実行しながら, LANアナライザでパケットの動きを追いかけながら, netstatでソケットの状態も随時見てみるとよいと思います。
More information about text formats
listenすれば接続できるのでは
まりこさん,こんにちわ。
プログラマを引退して年月が経つので,記憶が風化している部分もありますが...
acceptの前でも,listenが完了していれば,ソケットの状態は接続待ちになるので,
その時点でSYNパケットを受け付けることはできるっていうことじゃないのかしら。
つまり,acceptは新しい接続に対応して作られるソケットを
アプリケーションに渡すために使うものなので,acceptしなくても,
listenするだけでソケットは接続可能な状態になるということだと思います。
そして,listenしたところにSYNが来たら,
SYN+ACK,ACKと続けて,接続動作を完了し,
接続したコネクション用に新しくソケットができ,
この新しくできたソケットのディスクリプタを受け取る動作がacceptだということで。
記憶が風化しているので,自信はないのですが,そんな感じだったと思います。
だから,このような事態が起こるんじゃないかしら。
間違っていたら,指摘してください。 > 皆様
それから,ソケットに対する操作はすべてディスクリプタによって識別するので,
ソケットに対する操作とプロセスをforkするかどうかは直接関係ないはずです。
forkしなくても,別のディスクリプタを使ってsocket,bind,listen,acceptすれば,
一つのプロセスで複数通信することも可能です。
この辺,詳しく知りたかったら,
デバガでプログラムをステップ実行しながら,
LANアナライザでパケットの動きを追いかけながら,
netstatでソケットの状態も随時見てみるとよいと思います。