2016-10-18 7 views
0

私はローカルホスト上のソケットのオープンテストするためにJavaのLIBSのいずれかで次のロジックを見ています:localhostでServerSocketを開いてすぐに閉じるとTIME_WAITになりますか?

ServerSocket socket = new ServerSocket(port); 
socket.close(); 

私の質問は何のデータパケットが送信されていないとソケットがある場合は、このソケットリードはローカルホスト上の状態をTIME_WAITするだろうですそれを開いた直後に閉じた?このような場合、アプリケーションが同じポートにバインドしようとすると、2MSL値内で完了した場合、「アドレスはすでに使用中です。エラー」が発生する可能性がありますか?

私は上記のような小さなテストプログラムを作成しましたが、このプログラムを実行したLinuxマシンでnetstatまたはssを実行すると、このポートのTIME_WAITはまったく表示されません。ソケットがデータパケットを送信するのに使用されていない場合でも、ステートマシンは適用されるべきではありませんか?

+0

ソケットが決して 'CLOSED'状態から外れない場合、' CLOSED'状態に戻るために何もする必要はありません。 –

+0

こんにちは@Damien_The_Unbeliever - 申し訳ありませんが、私はポイントを取得していません。上記の場合のソケットはTIME_WAITを通過するでしょうか? –

+2

あなたが見ている特定のステートマシンダイアグラムがわからないのですが、[this one](http://www.tcpipguide.com/free/t_TCPOperationalOverviewandTCPFiniteStateMachineF-2.htm)と言ってください。ソケット*は 'CLOSED'状態で開始します。その後、いくつかの特定の遷移を経て 'ESTABLISHED'になり、' CLOSED'に戻る前に 'TIME_WAIT'で待っている特定の経路を下る必要があります。あなたは 'CLOSED'状態からソケットを移動するために何もしていないので、遷移は必要ありません。 –

答えて

1

TIME_WAITは接続内の状態です。あなたは接続を作成していません。ergo TIME_WAITには決して行きません。

関連する問題