現在、私は IMAP サーバーに取り組んでおり、サーバーを「正常に」再起動する方法を実装する必要があります。使用してboost::asio
います(ただし、必須ではありません)。既に操作 (フェッチなど) を実行しているクライアントに対して現在の操作を継続する必要がありますが、新しいサーバー インスタンス (展開している新しいバージョン) は 143 および 993 ポートをインターセプトし、ダウンタイムを回避するためにクライアントの受け入れを開始する必要があります。現在、私は2つのアイデアを持っています:
コマンドの UNIX ドメイン ソケットをリッスンします。拡張可能ですが、「ソケットを制御する」必要があるため実装が難しく、新しいサーバーへの移行など..
信号 (例: USR1)。サーバーはいくつかのクリーンアップを実行し、リッスン ポートを解放してから、引き続き受け入れられる新しいインスタンスに入ります。一方、古いインスタンスは、既に接続されているクライアントのクリーン シャットダウンを実行します
fork()
。exec()
... 他にアイデアはありますか?