diff options
-rw-r--r-- | pingu_adm.c | 13 | ||||
-rw-r--r-- | 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); } @@ -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[]) |