diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2007-09-28 19:04:21 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2007-09-28 19:04:21 +0000 |
commit | 599046168820193686960a1a89411bb4f878daf5 (patch) | |
tree | f9b6787932bf885f0290fd1821cacf584a8e387f /client.c | |
parent | 109873bdf876ca019ef30376d33d751472feb1a1 (diff) |
Add client_flush to flush output when transient commands are called.
Diffstat (limited to 'client.c')
-rw-r--r-- | client.c | 27 |
1 files changed, 26 insertions, 1 deletions
@@ -1,4 +1,4 @@ -/* $Id: client.c,v 1.7 2007-09-27 20:53:13 nicm Exp $ */ +/* $Id: client.c,v 1.8 2007-09-28 19:04:21 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -125,6 +125,31 @@ retry: } int +client_flush(struct client_ctx *cctx) +{ + struct pollfd pfd; + + /* XXX error response! */ + while (BUFFER_USED(cctx->srv_out) > 0) { + pfd.fd = cctx->srv_fd; + pfd.events = POLLIN|POLLOUT; + + if (poll(&pfd, 1, INFTIM) == -1) { + if (errno == EAGAIN || errno == EINTR) + continue; + fatal("poll failed"); + } + + if (buffer_poll(&pfd, cctx->srv_in, cctx->srv_out) != 0) { + log_warnx("lost server"); + return (1); + } + } + + return (0); +} + +int client_main(struct client_ctx *cctx) { struct pollfd pfds[2]; |