コンテンツへスキップ
uencoder

SO_REUSEADDR

SO_REUSEADDR を使うと、TIME_WAIT に残ったアドレスにソケットをバインドでき、再起動したサーバーがポートをすぐに取り戻せる。

目的

閉じたばかりのポートの即時再バインドを許すことで、サーバー再起動時の "Address already in use" を回避する。

メカニズム

設定すると、bind() は接続がまだ TIME_WAIT のローカルアドレスを受け付ける。TIME_WAIT は 2MSL(約 60~120 秒)続き、通常は待つ必要がある。SO_REUSEPORT との違いに注意すること。

ユースケース

  • サーバーの高速再起動
  • ポートの再利用
  • 開発とデバッグ

関連ツール

References