首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenSSL错误处理

OpenSSL错误处理
EN

Stack Overflow用户
提问于 2016-06-23 09:25:17
回答 2查看 18.6K关注 0票数 11

这是在OpenSSL中进行错误处理的正确方法吗?SSL_get_errorERR_get_error之间的区别是什么?在这方面,文档相当含糊。

代码语言:javascript
复制
int ssl_shutdown(SSL *ssl_connection)
{
    int rv, err;
    ERR_clear_error();
    rv = SSL_shutdown(ssl_connection);

    if (rv == 0)
        SSL_shutdown(ssl_connection);

    if (rv < 0)
    {
        err = SSL_get_error(ssl_connection, rv);

        if (err == SSL_ERROR_SSL)
            fprintf(stderr, "%s\n", ERR_error_string(ERR_get_error(), NULL));

        fprintf(stderr, "%s\n", SSL_state_string(ssl_connection));

        return 1;
    }

    SSL_free(ssl_connection);
    return 0;
}
EN

Stack Overflow用户

发布于 2016-06-23 14:46:31

和SSL_get_error和ERR_get_error的区别是什么?

OpenSSL有两个逻辑部分。首先是SSL库,libssl.a (和libssl.so),它包含了与通信相关的东西。第二个是密码库libcrypto.a (和libcrypto.so),它包括大数、配置、输入/输出等。

libssl.a依赖于libcrypto.a,这就是为什么link命令被定为-lssl -lcrypto的原因。

您可以使用SSL_get_error从SSL部分库中检索大多数错误,并使用ERR_get_error来检索库的SSL部分之外的错误。

这是在OpenSSL中进行错误处理的正确方法吗?

您展示的代码更接近于“如何关闭SSL套接字”。最终,旋转控制了两种情况。首先是半开连接,当客户端关闭而没有发送关闭通知消息时。第二个是您的程序在发送关闭通知消息时的行为。

很难回答“它是否正确”,因为我们不知道您想要的行为。如果您不关心是否发送关闭通知,那么我相信您只需要调用SSL_shutdown一次,无论客户端做什么。

票数 8
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37980798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档