いろいろと手を動かしながらソケットの謎を解いているのですがどうしても一つ腑に落ちない点があります。
サーバ側とクライアント側ソケットを一般的にTCPのコードで接続し、
クライアント側"だけ"をclose()した場合、
サーバ側: CLOSE_WAIT
クライアント側: FIN_WAIT2
の状態にそれぞれなります。ここまではわかります。
※因みに、プログラムが終了するとソケットが解除されるので終了前にsleep(10000000)を両方しています。
しかし、
その状態で暫くすると、クライアント側のソケットが消えてしまします。
(クライアント接続し、closeした状態)
sudo netstat -antlp | grep -e 5127 -e 8955
tcp 0 0 127.0.0.1:8955 127.0.0.1:5127 FIN_WAIT2 -
tcp 0 0 127.0.0.1:5127 127.0.0.1:8955 CLOSE_WAIT 42420/./server
(暫くしたあとの状態)
sudo netstat -antlp | grep -e 5127 -e 8955
tcp 0 0 127.0.0.1:5127 127.0.0.1:8955 CLOSE_WAIT 42420/./server
↑FIN_WAIT2 のソケットはなぜ消える??
クライアント側 => 相手のclose()を待っている状態でスリープ
サーバ側 => プログラムがclose()するのを待っている状態でスリープ
という状態なので、消える理由がわかりません。
その上、CLOSE_WAITしているソケットに再度クライアント(クライアントは同ポートでbindしている)が接続しても接続して送受信できてしまします。
これはCLOSE_WAITしているソケットを再利用のような具合で使用しているということなのでしょうか。
何かヒントをいただけましたら幸いです。
回答1件
あなたの回答
tips
プレビュー