From: Steinar H. Gunderson Date: Sat, 6 Apr 2013 16:13:55 +0000 (+0200) Subject: Implement writev(). Working reflector! X-Git-Tag: 1.0.0~213 X-Git-Url: https://git.sesse.net/?p=cubemap;a=commitdiff_plain;h=ad7d036afd462810aaa1c8686834fa91b2c4e5ae;hp=4971ba0e48d77b075fc972c13ec2978aa93630a1 Implement writev(). Working reflector! --- diff --git a/server.cpp b/server.cpp index b914b2e..da721e7 100644 --- a/server.cpp +++ b/server.cpp @@ -220,10 +220,18 @@ void Server::process_client(Client *client) } // See if we need to split across the circular buffer. - int ret; + ssize_t ret; if ((client->bytes_sent % BACKLOG_SIZE) + bytes_to_send > BACKLOG_SIZE) { - // TODO: writev - assert(false); + size_t bytes_first_part = BACKLOG_SIZE - (client->bytes_sent % BACKLOG_SIZE); + + iovec iov[2]; + iov[0].iov_base = const_cast(stream.data + (client->bytes_sent % BACKLOG_SIZE)); + iov[0].iov_len = bytes_first_part; + + iov[1].iov_base = const_cast(stream.data); + iov[1].iov_len = bytes_to_send - bytes_first_part; + + ret = writev(client->sock, iov, 2); } else { ret = write(client->sock, stream.data + (client->bytes_sent % BACKLOG_SIZE),