--- a/src/server/util/io.c Tue Dec 27 14:02:28 2016 +0100 +++ b/src/server/util/io.c Tue Dec 27 17:19:00 2016 +0100 @@ -283,11 +283,16 @@ SSLStream *st = pool_malloc(pool, sizeof(SSLStream)); st->st = ssl_io_funcs; st->ssl = ssl; + st->error = 0; return (IOStream*)st; } ssize_t net_ssl_write(SSLStream *st, void *buf, size_t nbytes) { - return SSL_write(st->ssl, buf, nbytes); + int ret = SSL_write(st->ssl, buf, nbytes); + if(ret <= 0) { + st->error = SSL_get_error(st->ssl, ret); + } + return ret; } ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt) { @@ -295,6 +300,7 @@ for(int i=0;i<iovcnt;i++) { int ret = SSL_write(st->ssl, iovec[i].iov_base, iovec[i].iov_len); if(ret <= 0) { + st->error = SSL_get_error(st->ssl, ret); return 0; } r += ret; @@ -303,11 +309,18 @@ } ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes) { - return SSL_read(st->ssl, buf, nbytes); + int ret = SSL_read(st->ssl, buf, nbytes); + if(ret <= 0) { + st->error = SSL_get_error(st->ssl, ret); + } + return ret; } void net_ssl_close(SSLStream *st) { - SSL_shutdown(st->ssl); + int ret = SSL_shutdown(st->ssl); + if(ret != 1) { + st->error = SSL_get_error(st->ssl, ret); + } close(SSL_get_fd(st->ssl)); }