summaryrefslogtreecommitdiffstats
path: root/client.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2007-09-28 19:04:21 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2007-09-28 19:04:21 +0000
commit599046168820193686960a1a89411bb4f878daf5 (patch)
treef9b6787932bf885f0290fd1821cacf584a8e387f /client.c
parent109873bdf876ca019ef30376d33d751472feb1a1 (diff)
Add client_flush to flush output when transient commands are called.
Diffstat (limited to 'client.c')
-rw-r--r--client.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/client.c b/client.c
index 1dec0613..c997f7b9 100644
--- a/client.c
+++ b/client.c
@@ -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];