SSL_free是否也关闭对象的文件描述符?C++ OpenSSL
我在https://www.openssl.org/docs/man1.1.1/man3/SSL_free.html上找不到这个信息。
如果openssl没有关闭文件描述符:您应该像示例1或例2那样关闭文件描述符吗?甚至是例子3(不太可能)?
示例1:
SSL* ssl = ...;
int fd = SSL_get_fd(ssl);
SSL_free(ssl);
close(fd);示例2:
SSL* ssl = ...;
int rfd = SSL_get_rfd(ssl);
int wfd = SSL_get_wfd(ssl);
SSL_free(ssl);
close(rfd);
close(wfd);例3:
SSL* ssl = ...;
int fd = SSL_get_fd(ssl);
int rfd = SSL_get_rfd(ssl);
int wfd = SSL_get_wfd(ssl);
SSL_free(ssl);
close(fd);
close(rfd);
close(wfd);发布于 2022-09-25 07:53:57
您不应该close从SSL_get_fd() (或SSL_get_rfd()/SSL_get_wfd() )获得的文件描述符
SSL_free()还为间接受影响的项调用了免费()ing过程,如果适用的话:缓冲BIO、读和写BIOs、为这个ssl专门创建的密码列表SSL_SESSION。在调用SSL_free()之前或之后没有显式地释放这些,因为尝试释放两次可能会导致程序失败。
至于第三个例子:如果SSL_get_rfd()和SSL_get_wfd()返回不同的文件描述符,SSL_get_fd()返回与SSL_get_rfd()相同的描述符。
https://stackoverflow.com/questions/73842687
复制相似问题