Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
問題
などの状況でまれに、app.py の実行で
サーバーに接続できませんでした
エラーになってしまう。原因
SO_REUSEADDR オプションがないことにより、TIME_WAIT状態のポートが残っている状態で
サーバーを起動しようとしたため。
修正内容
サーバーのbind前にオプション設定を追加。
調査方法
Ubuntu 22.04
stress
パッケージで CPU負荷を高い状況に設定。(CPU24コア中22コアに負荷)
python3 app.py
を繰り返し実行。また別ターミナルにおいてソケットの状態を確認。
修正前
報告のあったエラーになることを確認しました。
またエラー時にサーバープロセスで以下の例外が起きていることを確認しました。
修正後
エラーにならないことを確認しました。
そのほか
ご迷惑をおかけし、申し訳ございません。
実装時もUbuntuやWindowsにおいて挙動は確認しましたが、
負荷の高い環境での確認や連続的な実行の可能性を考慮したソケットプログラミングへの理解が足りていなかったのは、私の不徳の致すところです。