From 07079dc8c054b4617e3239788cc95a64e09e6698 Mon Sep 17 00:00:00 2001 From: Joris Vink Date: Tue, 15 Oct 2013 11:09:33 +0200 Subject: [PATCH] Do not kill a connection if nb->len is 0 when sending data. --- src/net.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/net.c b/src/net.c index e6ae5ed..a1af251 100644 --- a/src/net.c +++ b/src/net.c @@ -97,31 +97,30 @@ net_send(struct connection *c) while (!TAILQ_EMPTY(&(c->send_queue))) { nb = TAILQ_FIRST(&(c->send_queue)); - if (nb->len == 0) { - kore_debug("net_send(): len is 0"); - return (KORE_RESULT_ERROR); - } + if (nb->len != 0) { + r = SSL_write(c->ssl, + (nb->buf + nb->offset), (nb->len - nb->offset)); - r = SSL_write(c->ssl, - (nb->buf + nb->offset), (nb->len - nb->offset)); + kore_debug("net_send(%ld/%ld bytes), progress with %d", + nb->offset, nb->len, r); - kore_debug("net_send(%ld/%ld bytes), progress with %d", - nb->offset, nb->len, r); - - if (r <= 0) { - r = SSL_get_error(c->ssl, r); - switch (r) { - case SSL_ERROR_WANT_READ: - case SSL_ERROR_WANT_WRITE: - c->flags &= ~CONN_WRITE_POSSIBLE; - return (KORE_RESULT_OK); - default: - kore_debug("SSL_write(): %s", ssl_errno_s); - return (KORE_RESULT_ERROR); + if (r <= 0) { + r = SSL_get_error(c->ssl, r); + switch (r) { + case SSL_ERROR_WANT_READ: + case SSL_ERROR_WANT_WRITE: + c->flags &= ~CONN_WRITE_POSSIBLE; + return (KORE_RESULT_OK); + default: + kore_debug("SSL_write(): %s", + ssl_errno_s); + return (KORE_RESULT_ERROR); + } } + + nb->offset += (size_t)r; } - nb->offset += (size_t)r; if (nb->offset == nb->len) { TAILQ_REMOVE(&(c->send_queue), nb, list);