我正在使用OpenSSL BIO _...函数来创建一个安全与否的连接。基本工作正常,无论连接是否加密(即我可以使用BIO_read()
和BIO_write()
函数进行通信,正如预期的那样。)
但是,当我想创建一个孩子时,习惯上关闭我们不会在父母或孩子身上使用的套接字。我可以通过使用SOCK_CLOEXEC标记套接字来解决子问题。但是,如果我想反过来,请在子项中保持套接字打开并在我遇到问题的父项中关闭套接字:BIO_free_all()
函数在shutdown(s, SHUT_RDWR)
之前调用close(s)
。之后的结果是套接字在子进程中也是死的(有效地,关闭...)。
我的问题是:有没有办法通过避免shutdown()
调用来正确地在父母和孩子之间共享OpenSSL BIO接口?
如果不在BIO界面本身,我总是可以在调用BIO_free_all()
之前关闭文件描述符,但这听起来像是一个丑陋的黑客!