调用fork后,gRPC服务器中的SSL握手失败

时间:2017-03-17 21:35:36

标签: c++ linux ssl fork grpc

我试图通过分叉子进程并使父进程退出来使c ++ gRPC服务器成为守护进程。但之后客户端握手开始失败。

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()之前完成相同的fork,一切正常。 我对基础SSL实现以及gRPC服务器如何使用密钥和证书一无所知。

1 个答案:

答案 0 :(得分:0)

正在关闭与连接相对应的文件描述,这导致SSL握手失败。 FD首先被关闭的原因可能是由于在fork之后,父和子共享内核中的文件描述符结构。因此,除非非常注意同步访问,否则您将进行数据竞争。

如果可能的话,请先尝试分叉。否则,这一切都取决于父母和孩子在后叉上做什么。