From 26372eb85d3008c356b20e9eae506dc464dc0856 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 25 Jun 2017 10:27:48 +0200 Subject: [PATCH] client: Inline ring_to_file() into new send_input() In preparation for the next commit. Signed-off-by: Markus Armbruster --- src/client/play.c | 17 ++++++++++++++++- src/client/ringbuf.c | 3 +-- src/client/ringbuf.h | 4 +++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/client/play.c b/src/client/play.c index da5b2616..2e074233 100644 --- a/src/client/play.c +++ b/src/client/play.c @@ -448,6 +448,21 @@ recv_input(int fd, struct ring *inbuf) return res; } +static int +send_input(int fd, struct ring *inbuf) +{ + struct iovec iov[2]; + int cnt; + ssize_t res; + + cnt = ring_to_iovec(inbuf, iov); + res = writev(fd, iov, cnt); + if (res < 0) + return res; + ring_discard(inbuf, res); + return res; +} + static void intr(int sig) { @@ -562,7 +577,7 @@ play(int sock) /* send it to the server */ if (FD_ISSET(sock, &wrfd)) { - n = ring_to_file(&inbuf, sock); + n = send_input(sock, &inbuf); if (n < 0) { perror("write socket"); return -1; diff --git a/src/client/ringbuf.c b/src/client/ringbuf.c index 99d1fe30..638c9e4c 100644 --- a/src/client/ringbuf.c +++ b/src/client/ringbuf.c @@ -35,7 +35,6 @@ #include #include #include -#include #include "ringbuf.h" /* @@ -219,7 +218,7 @@ ring_from_file(struct ring *r, int fd) * @iov[] must have at least two elements. * Return number of elements used (zero for an empty ring buffer). */ -static int +int ring_to_iovec(struct ring *r, struct iovec iov[]) { unsigned cons = r->cons % RING_SIZE; diff --git a/src/client/ringbuf.h b/src/client/ringbuf.h index 4d44a2b9..8d16f0cc 100644 --- a/src/client/ringbuf.h +++ b/src/client/ringbuf.h @@ -27,13 +27,14 @@ * ringbuf.h: Simple ring buffer * * Known contributors to this file: - * Markus Armbruster, 2007-2015 + * Markus Armbruster, 2007-2017 */ #ifndef RINGBUF_H #define RINGBUF_H #include +#include #define RING_SIZE 4096 @@ -61,6 +62,7 @@ extern int ring_putm(struct ring *, void *, size_t); extern void ring_discard(struct ring *, int); extern int ring_search(struct ring *, char *, int); extern int ring_from_file(struct ring *, int fd); +extern int ring_to_iovec(struct ring *, struct iovec[]); extern int ring_to_file(struct ring *, int fd); #endif