diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2014-07-12 23:13:13 +0200 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2014-07-12 23:17:38 +0200 |
commit | ccb2e4006d5b890cbcf1d32e255b689192d43240 (patch) | |
tree | b136b1a045a5287bec2863f75e9f60c75ac48cff /src | |
parent | 5ad2781681d26b2923e9f432db0e981fa7b7da72 (diff) | |
download | xK-ccb2e4006d5b890cbcf1d32e255b689192d43240.tar.gz xK-ccb2e4006d5b890cbcf1d32e255b689192d43240.tar.xz xK-ccb2e4006d5b890cbcf1d32e255b689192d43240.zip |
Implement irc_try_write()
Diffstat (limited to 'src')
-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; } |