問題タブ [time-wait]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
http - Go クライアント プログラムは TIME_WAIT 状態で多くのソケットを生成します
複数のゴルーチンから多くの HTTP リクエストを生成する Go プログラムがあります。しばらく実行した後、プログラムは次のエラーを吐き出します:接続:要求されたアドレスを割り当てることができません。
で確認するとnetstat
、 で多数 (28229) の接続が得られTIME_WAIT
ます。
ソケットの数TIME_WAIT
が多いのは、ゴルーチンの数が 3 の場合で、5 の場合はクラッシュを引き起こすほど深刻です。
Dockerの下でUbuntu 14.4を実行し、バージョン1.7に移行します
これがGoプログラムです。
これはサーバープログラムです:
sockets - localhost で ServerSocket を開いてすぐに閉じると、TIME_WAIT が発生しますか?
ローカルホストでソケットのオープンをテストするために、Java ライブラリの 1 つに次のロジックが表示されます。
私の質問は、データ パケットが送信されておらず、ソケットを開いた直後にソケットが閉じられた場合、このソケットは localhost で TIME_WAIT 状態になるのでしょうか? このような場合、アプリケーションが同じポートにバインドしようとすると、2MSL 値内で実行すると「アドレスは既に使用中のエラー」を引き起こす可能性がありますか?
上記のような小さなテスト プログラムを作成しましたが、このプログラムを実行した Linux マシンで netstat または ss を実行すると、このポートの TIME_WAIT がまったく表示されません。ソケットがデータ パケットの送信に使用されていない場合でも、ステート マシンは適用されるべきではありませんか?