commit 07079dc8c054b4617e3239788cc95a64e09e6698
parent 8b47863cd45cf4685b74f5390a800c1e28b721b9
Author: Joris Vink <joris@coders.se>
Date: Tue, 15 Oct 2013 11:09:33 +0200
Do not kill a connection if nb->len is 0 when sending data.
Diffstat:
src/net.c | | | 43 | +++++++++++++++++++++---------------------- |
1 file changed, 21 insertions(+), 22 deletions(-)
diff --git 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);
- }
-
- 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);
-
- 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 (nb->len != 0) {
+ 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);
+
+ 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);