我试图通过分叉子进程并使父进程退出来使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服务器如何使用密钥和证书一无所知。
答案 0 :(得分:0)
正在关闭与连接相对应的文件描述,这导致SSL握手失败。 FD首先被关闭的原因可能是由于在fork之后,父和子共享内核中的文件描述符结构。因此,除非非常注意同步访问,否则您将进行数据竞争。
如果可能的话,请先尝试分叉。否则,这一切都取决于父母和孩子在后叉上做什么。