src/server/util/io.c

changeset 133
87b405d61f64
parent 126
631aaa01b2b5
child 142
55298bc9ed28
--- 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));
 }
 

mercurial