我试图通过伪造一个子并使父退出来使C++ +cc>服务器成为守护进程。但之后,客户机握手开始失败。
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}]}
在调用
gRPC
之后调用fork()
时会发生这种情况。如果在BuildAndStart()
之前使用同一个叉子,则一切正常。我对底层SSL实现以及gRPC服务器如何处理密钥和证书一无所知。
最佳答案
正在关闭与连接对应的文件描述,这将导致SSL握手失败。首先关闭FD的原因可能是,在fork之后,父级和子级在内核中共享文件描述符结构因此,除非非常小心地同步访问,否则就会出现数据竞争。
如果可能的话,试着早点叉。否则,一切都取决于父母和孩子做什么后叉。