From ee7897d5568535cbe03318debcb71632242f27e6 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Wed, 14 Mar 2012 11:27:30 +0100 Subject: pingu_adm: allow only one command per connection --- pingu_adm.c | 13 ++++++------- pinguctl.c | 12 ++++++++---- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/pingu_adm.c b/pingu_adm.c index d0ceb49..b59b9b0 100644 --- a/pingu_adm.c +++ b/pingu_adm.c @@ -27,12 +27,13 @@ struct adm_conn { static void pingu_adm_free_conn(struct ev_loop *loop, struct adm_conn *rm) { - int fd = rm->io.fd; + int fd = rm->io.fd; - ev_io_stop(loop, &rm->io); - ev_timer_stop(loop, &rm->timeout); - close(fd); - free(rm); + ev_io_stop(loop, &rm->io); + ev_timer_stop(loop, &rm->timeout); + close(fd); + free(rm); + log_debug("Admin connection closed"); } static struct { @@ -85,8 +86,6 @@ static void pingu_adm_recv_cb (struct ev_loop *loop, struct ev_io *w, if (adm_handler[i].command == NULL) log_error("%s: unknown admim command", conn->cmd); - return; - err: pingu_adm_free_conn(loop, conn); } diff --git a/pinguctl.c b/pinguctl.c index 6788794..02dbe14 100644 --- a/pinguctl.c +++ b/pinguctl.c @@ -48,12 +48,16 @@ static int adm_send_cmd(int fd, const char *cmd) static int adm_recv(int fd) { char buf[1024]; - int n; + int n, total = 0; - n = recv(fd, buf, sizeof(buf), 0); - if (n > 0) + while (1) { + n = recv(fd, buf, sizeof(buf), 0); + if (n <= 0) + break; write(STDOUT_FILENO, buf, n); - return n; + total += n; + } + return total; } int main(int argc, char *argv[]) -- cgit v1.2.3