diff options
| -rw-r--r-- | sslio.c | 14 | 
1 files changed, 13 insertions, 1 deletions
| @@ -5,6 +5,9 @@  #ifdef HIREDIS_SSL  #include <pthread.h>  #include <errno.h> +#include <string.h> + +#include <openssl/err.h>  void __redisSetError(redisContext *c, int type, const char *str); @@ -143,6 +146,7 @@ int redisSslCreate(redisContext *c, const char *capath, const char *certpath,      SSL_set_connect_state(s->ssl);      c->flags |= REDIS_SSL; +    ERR_clear_error();      int rv = SSL_connect(c->ssl->ssl);      if (rv == 1) {          return REDIS_OK; @@ -155,7 +159,15 @@ int redisSslCreate(redisContext *c, const char *capath, const char *certpath,      }      if (c->err == 0) { -        __redisSetError(c, REDIS_ERR_IO, "SSL_connect() failed"); +        char err[512]; +        if (rv == SSL_ERROR_SYSCALL) +            snprintf(err,sizeof(err)-1,"SSL_connect failed: %s",strerror(errno)); +        else { +            unsigned long e = ERR_peek_last_error(); +            snprintf(err,sizeof(err)-1,"SSL_connect failed: %s", +                    ERR_reason_error_String(e)); +        } +        __redisSetError(c, REDIS_ERR_IO, err);      }      return REDIS_ERR;  } | 
