diff options
-rw-r--r-- | src/kike.c | 22 |
1 files changed, 21 insertions, 1 deletions
@@ -456,7 +456,27 @@ irc_try_read_ssl (struct connection *conn) static bool irc_try_write (struct connection *conn) { - // TODO + struct str *buf = &conn->write_buffer; + ssize_t n_written; + + while (buf->len) + { + n_written = send (conn->socket_fd, buf->str, buf->len, 0); + if (n_written >= 0) + { + str_remove_slice (buf, 0, n_written); + continue; + } + + if (errno == EAGAIN) + return true; + if (errno == EINTR) + continue; + + print_debug ("%s: %s: %s", __func__, "send", strerror (errno)); + connection_kill (conn, strerror (errno)); + return false; + } return true; } |