0
子をフォークして親の出口を作ることで、C++ gRPC
サーバーをデーモンプロセスにしようとしています。しかしその後、クライアントハンドシェイクが失敗し始めます。フォークを呼び出した後、gRPCサーバーでSSLハンドシェイクが失敗する
E0307 01:15:58.221786152 27094 handshake.c:128] Security handshake failed:
{"created":"@1488878158.221756436","description":"Handshake read failed",
"file":"src/core/lib/security/transport/handshake.c",
"file_line":237,"referenced_errors":
[{"created":"@1488878158.221740996","description":"FD shutdown",
"file":"src/core/lib/iomgr/ev_epoll_linux.c","file_line":948}]}
fork()
がBuildAndStart()
への呼び出しの後に呼び出されたときに発生します。 BuildAndStart()
の前に同じフォークが実行されていれば、すべて正常に動作します。 私は基礎となるSSLの実装と、gRPCサーバーがキーと証明書でどのように動作するかは知らない。
フォークは早く動作します。これにより、子がポートでリスンを開始する前に、親を終了させることができます。クライアントは、まだ準備ができていないサーバーとの接続を確立しようとする可能性があります。私はそれを避けようとしていました。しかし、パイプを使用して親が子が準備ができていることを示すのを待つことで、この問題を克服することができます。 – damleak
いいですね。親と子を同期させる必要が常にあり、パイプは1つの方法です。 –