2

助けてください、

最初に、ソケットを作成し、SO_REUSEADDR なしでアドレスにバインドしました。

次に、プログラムがクラッシュしました(ソケットを適切に閉じていません)

次に、再度実行すると、bind() から「アドレスは既に使用されています」が返されます。

SO_REUSEADDR を使用するようにソース コードを変更しようとしましたが、使用できません。

今、再度 bind を実行できませんでした (サーバーを再起動できません)

4

1 に答える 1

6

セッションがタイムアウトするまで待つだけで、完全に削除されます。

セッションが「汚い」方法でシャットダウンすると、そのアドレスを再度再利用することはできません (SO_REUSEADDR を使用していないと仮定して) セグメントの最大有効期間の 2 倍 - 通常、これは通常のネットワーク ハードウェアでは約 4 分ですが、実際には状況によって異なります。媒体の特性について (例えば、サテライトはより大きな MSL を持つ場合があります)。

これは、まだ遷移中のパケットが到着せず、新しいセッションでのシーケンスが台無しにならないようにするためです。

于 2013-01-31T08:32:01.023 に答える