这是在OpenSSL中进行错误处理的正确方法吗?SSL_get_error和ERR_get_error之间的区别是什么?在这方面,文档相当含糊。
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;
}发布于 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一次,无论客户端做什么。
https://stackoverflow.com/questions/37980798
复制相似问题