src/server/util/io.c

changeset 734
a5f3e1e5e744
parent 719
c4c2b8e8ddc5
child 735
902b417ab6d2
--- a/src/server/util/io.c	Mon Mar 16 19:44:18 2026 +0100
+++ b/src/server/util/io.c	Tue Mar 17 20:49:37 2026 +0100
@@ -68,6 +68,8 @@
 #include "../daemon/event.h"
 #include <cx/printf.h>
 
+#include <openssl/err.h>
+
 IOStream native_io_funcs = {
     (io_write_f)net_sys_write,
     (io_writev_f)net_sys_writev,
@@ -490,6 +492,7 @@
         
         ssize_t wv = fd->writev(fd, io, iovec_len);
         if(wv <= 0) {
+            log_ereport(LOG_INFORM, "net_http_write chunk writev ret %d", (int)wv);
             st->st.io_errno = net_errno(st->fd);
             return wv;
         }
@@ -864,11 +867,17 @@
 
 ssize_t net_ssl_write(SSLStream *st, const void *buf, size_t nbytes) {
     int ret = SSL_write(st->ssl, buf, nbytes);
+    log_ereport(LOG_INFORM, "SSL_write(%p, %d) -> %d", buf, (int)nbytes, ret);
     if(ret <= 0) {
         st->error = SSL_get_error(st->ssl, ret);
         if(st->error == SSL_ERROR_WANT_WRITE || st->error == SSL_ERROR_WANT_READ) {
             st->st.io_errno = EWOULDBLOCK;
         } else {
+            log_ereport(LOG_FAILURE, "net_ssl_write SSL error: %d , nbytes: %d, ret: %d", st->error, (int)nbytes, ret);
+            unsigned long e;
+            while ((e = ERR_get_error())) {
+                fprintf(stderr, "%s\n", ERR_error_string(e, NULL));
+            }
             st->st.io_errno = -1;
         }
         ret = -1;
@@ -879,10 +888,13 @@
 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt) {
     ssize_t r = 0;
     for(int i=0;i<iovcnt;i++) {
+        int ml = iovec[i].iov_len > 10 ? 10 : iovec[i].iov_len;
         int ret = SSL_write(st->ssl, iovec[i].iov_base, iovec[i].iov_len);
+        log_ereport(LOG_INFORM, "SSL_write(%p {%.*s}, %d) -> %d", iovec[i].iov_base, ml, iovec[i].iov_base, (int)iovec[i].iov_len, ret);
         if(ret <= 0) {
             if(r == 0) {
                 st->error = SSL_get_error(st->ssl, ret);
+                log_ereport(LOG_FAILURE, "net_ssl_write SSL error: %d , iov_len: %d, ret: %d", st->error, (int)iovec[i].iov_len, ret);
                 if(st->error == SSL_ERROR_WANT_WRITE || st->error == SSL_ERROR_WANT_READ) {
                     st->st.io_errno = EWOULDBLOCK;
                 } else {

mercurial