-
Notifications
You must be signed in to change notification settings - Fork 305
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
エンジン再起動時にTCPの状態が CLOSE_WAIT
のときに, そのタイムアウトを待つ
#1326
Comments
issue作成ありがとうございます!!
が良さそうに思いました! 現状のコード的に実現が難しそうだった場合は、エンジンをrestartする際、終了してからちょっと待って起動開始する処理に変えるのもありかもと思いました! どんな環境でもCPU/GPU切り替えで起こる現象なのか不明ですが、もしそうだった場合は少し影響が大きそうなので、優先度を中に設定してみました。 |
自分の環境でもエンジンを再起動したとき時々代替ポートに切り替わる現象が起こりました。
少し実験してみたのですが外部アドレスの方が |
僕も再度確認してみたのですが、再起動時に TCP 127.0.0.1:50021 127.0.0.1:60162 FIN_WAIT_2 11972
TCP 127.0.0.1:60162 127.0.0.1:50021 CLOSE_WAIT 28656 いろいろ調べてみて完全に理解しました!! 実際今のVOICEVOXのコードを見ると、Linuxの場合はLINSTENステートだけをlsofしていそうです! |
なるほど!!! こちら, https://github.com/VOICEVOX/voicevox/pull/1317/files#diff-def518e538d6e3fe3d0320fa3a6ffd0d259b575e2a76b63f668482e737e16f16R53-R56 で 参考画像Footnotes |
なので |
ですね!! listeningはそのポートで待ってるサーバーがいることを意味してるはず。 のでlisteningしてるサーバーがいるかどうかだけで判断すれば良い、みたいな感じかなと!! |
Re: #1326 (comment), #1326 (comment) @sabonerune さん, @Hiroshiba さん, なるほど了解です!!! ありがとうございます. (上の activity に書いてあるように, #1317 がマージされたら, この Issue は自動的に close される予定です.) |
なぜか自動closeされなかったので閉じます! |
良い Issue のタイトルが思いつかなかった…
内容
あらすじ
#1317 にて, エンジンの起動ポートが既に割り当てられている場合, 代替ポートで起動するようになりました.
また, エディターの終了後すぐに起動すると, ポートが
TIME_WAIT
になっているので, そのときはWindows のみ,ポートが割り当てられていると判断しないようにしました.
課題
エンジンモード (CPU ⇄ GPU) の切り替え時に伴ってエンジンが再起動するときのみ, 一瞬
CLOSE_WAIT
になるので, エンジンの起動ポートが変更されるようです. しかし, メニューボタンから
エンジンの再起動を行なった場合, ポートの変更は行われなかったようです.
Pros 良くなる点
余計なポート変更を避けられる
Cons 悪くなる点
CLOSE_WAIT
のタイムアウトを待つ (後述) ので直接影響はしないが, いわば “割り当て可能である” 条件を広くするので誤判断に気をつける必要があるかも…?
実現方法
CLOSE_WAIT
のとき,CLOSE
になる (or 割り当て可能になる) まで, タイムアウト付きで待機する.または,
(ヒホさんも私も見つけられなかったですが… )
VOICEVOXのバージョン
#1317 より
OSの種類/ディストリ/バージョン
その他
参考資料
「CLOSING」でACKを受けた状態。アクティブ・クローズ後のタイムアウト待ち状態。同じシーケンス番号やポート番号などを再利用しないように、しばらく待ってから(ネットワーク上で遅れていたパケットがこの時間内に到着する可能性があるので、それと衝突しないように待つ)、「CLOSED」へ遷移して終了する。
パッシブ・クローズの状態。送信側にFINを送信して「LAST_ACK」へ遷移する。
Footnotes
信頼性のある通信を実現するTCPプロトコル - @IT より ↩
TPCの仕組み - Qiita より ↩
The text was updated successfully, but these errors were encountered: