diff options
author | Max Kellermann <max@duempel.org> | 2008-08-28 20:03:58 +0200 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-09-01 18:35:18 -0700 |
commit | e3293d40147f440cc520f77084a3216064a9b4dd (patch) | |
tree | 813e6bf7acca19283d1f5a47faae325527f14b2e | |
parent | d6c92ea1348730de5ed8d31b40c92eb5b8e71944 (diff) | |
download | mpd-e3293d40147f440cc520f77084a3216064a9b4dd.tar.gz mpd-e3293d40147f440cc520f77084a3216064a9b4dd.tar.xz mpd-e3293d40147f440cc520f77084a3216064a9b4dd.zip |
client: moved code to client_write()
Move the second part of client_write_output() into a separate
function.
Diffstat (limited to '')
-rw-r--r-- | src/client.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/src/client.c b/src/client.c index 531177ab2..d681f8b0b 100644 --- a/src/client.c +++ b/src/client.c @@ -741,41 +741,43 @@ static void client_defer_output(struct client *client, *buf_r = new_sllnode(data, length); } -static void client_write_output(struct client *client) +static void client_write(struct client *client, + const char *data, size_t length) { ssize_t ret; + assert(client->deferred_send == NULL); + + if ((ret = write(client->fd, data, length)) < 0) { + if (errno == EAGAIN || errno == EINTR) { + client->deferred_send = new_sllnode(data, length); + } else { + DEBUG("client %i: problems writing\n", client->num); + client->expired = 1; + return; + } + } else if ((size_t)ret < client->send_buf_used) { + client->deferred_send = new_sllnode(data + ret, length - ret); + } + + if (client->deferred_send) { + DEBUG("client %i: buffer created\n", client->num); + client->deferred_bytes = + client->deferred_send->size + + sizeof(struct sllnode); + } +} + +static void client_write_output(struct client *client) +{ if (client->expired || !client->send_buf_used) return; if (client->deferred_send != NULL) client_defer_output(client, client->send_buf, client->send_buf_used); - else { - if ((ret = write(client->fd, client->send_buf, - client->send_buf_used)) < 0) { - if (errno == EAGAIN || errno == EINTR) { - client->deferred_send = - new_sllnode(client->send_buf, - client->send_buf_used); - } else { - DEBUG("client %i: problems writing\n", - client->num); - client->expired = 1; - return; - } - } else if ((size_t)ret < client->send_buf_used) { - client->deferred_send = - new_sllnode(client->send_buf + ret, - client->send_buf_used - ret); - } - if (client->deferred_send) { - DEBUG("client %i: buffer created\n", client->num); - client->deferred_bytes = - client->deferred_send->size - + sizeof(struct sllnode); - } - } + else + client_write(client, client->send_buf, client->send_buf_used); client->send_buf_used = 0; } |