From ccb2e4006d5b890cbcf1d32e255b689192d43240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Sat, 12 Jul 2014 23:13:13 +0200 Subject: [PATCH] Implement irc_try_write() --- src/kike.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/kike.c b/src/kike.c index 92d0f93..7c151e4 100644 --- a/src/kike.c +++ b/src/kike.c @@ -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; }