From 98fe29a63831e4c3ec069f084ddd51b0ebdfb2f0 Mon Sep 17 00:00:00 2001 From: Bastien Dejean Date: Sat, 22 Jul 2017 22:28:13 +0200 Subject: [PATCH] bspc: Stop if stdout is closed Fixes #681. --- src/bspc.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/bspc.c b/src/bspc.c index fe23c64..e265d5c 100644 --- a/src/bspc.c +++ b/src/bspc.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include "helpers.h" @@ -78,15 +79,29 @@ int main(int argc, char *argv[]) } int ret = EXIT_SUCCESS, nb; - while ((nb = recv(fd, rsp, sizeof(rsp)-1, 0)) > 0) { - rsp[nb] = '\0'; - if (rsp[0] == FAILURE_MESSAGE[0]) { - ret = EXIT_FAILURE; - printf("%s", rsp + 1); - } else { - printf("%s", rsp); + + struct pollfd fds[] = { + {fd, POLLIN, 0}, + {STDOUT_FILENO, POLLHUP, 0}, + }; + + while (poll(fds, 2, -1) > 0) { + if (fds[0].revents & POLLIN) { + if ((nb = recv(fd, rsp, sizeof(rsp)-1, 0)) > 0) { + rsp[nb] = '\0'; + if (rsp[0] == FAILURE_MESSAGE[0]) { + ret = EXIT_FAILURE; + printf("%s", rsp + 1); + } else { + printf("%s", rsp); + } + fflush(stdout); + } else { + break; + } + } else if (fds[1].revents & POLLHUP) { + break; } - fflush(stdout); } close(fd);