在OpenSSL v1.1.0中使用unique_ptr <ssl>

时间:2017-09-07 07:34:35

标签: c++11 openssl

我有一些使用unique_ptr管理SSL和SSL_CTX指针的代码。

以下代码使用OpenSSL 1.0.2进行编译,但不能使用OpenSSL 1.1.1进行编译:

std::unique_ptr<SSL>    m_pSession

我包含'openssl / ssl.h',但是使用OpenSSL 1.1.1我得到以下编译错误(使用Visual Studio):

error C2027: use of undefined type 'ssl_st'

我已经google了一下,似乎OpenSSL的后期版本无法在任何地方提供ssl_st的真实声明?这将是什么解决方案?

1 个答案:

答案 0 :(得分:0)

在OpenSSL论坛的帮助下,我得到了以下解决方案。

为unique_ptr定义了自定义删除器:

struct SslDeleter {
    void operator()(SSL *_p)
    {
        SSL_shutdown(_p);
        SSL_free(_p);
    }

    void operator()(SSL_CTX *_p)
    {
        SSL_CTX_free(_p);
    }
};

使用typedef轻松使用智能指针:

using UniqueSslPtr = std::unique_ptr<SSL, SslDeleter>;

using UniqueCtxPtr = std::unique_ptr<SSL_CTX, SslDeleter>;

自定义删除工具适用于SSLSSL_CTX,也适用于shared_ptr