client: Inline ring_to_file() into new send_input()

In preparation for the next commit.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
Markus Armbruster 2017-06-25 10:27:48 +02:00
parent 53c8794ef8
commit 26372eb85d
3 changed files with 20 additions and 4 deletions

View file

@ -448,6 +448,21 @@ recv_input(int fd, struct ring *inbuf)
return res; 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 static void
intr(int sig) intr(int sig)
{ {
@ -562,7 +577,7 @@ play(int sock)
/* send it to the server */ /* send it to the server */
if (FD_ISSET(sock, &wrfd)) { if (FD_ISSET(sock, &wrfd)) {
n = ring_to_file(&inbuf, sock); n = send_input(sock, &inbuf);
if (n < 0) { if (n < 0) {
perror("write socket"); perror("write socket");
return -1; return -1;

View file

@ -35,7 +35,6 @@
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <sys/uio.h>
#include "ringbuf.h" #include "ringbuf.h"
/* /*
@ -219,7 +218,7 @@ ring_from_file(struct ring *r, int fd)
* @iov[] must have at least two elements. * @iov[] must have at least two elements.
* Return number of elements used (zero for an empty ring buffer). * Return number of elements used (zero for an empty ring buffer).
*/ */
static int int
ring_to_iovec(struct ring *r, struct iovec iov[]) ring_to_iovec(struct ring *r, struct iovec iov[])
{ {
unsigned cons = r->cons % RING_SIZE; unsigned cons = r->cons % RING_SIZE;

View file

@ -27,13 +27,14 @@
* ringbuf.h: Simple ring buffer * ringbuf.h: Simple ring buffer
* *
* Known contributors to this file: * Known contributors to this file:
* Markus Armbruster, 2007-2015 * Markus Armbruster, 2007-2017
*/ */
#ifndef RINGBUF_H #ifndef RINGBUF_H
#define RINGBUF_H #define RINGBUF_H
#include <stddef.h> #include <stddef.h>
#include <sys/uio.h>
#define RING_SIZE 4096 #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 void ring_discard(struct ring *, int);
extern int ring_search(struct ring *, char *, int); extern int ring_search(struct ring *, char *, int);
extern int ring_from_file(struct ring *, int fd); 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); extern int ring_to_file(struct ring *, int fd);
#endif #endif