diff options
Diffstat (limited to 'src/sss_client')
-rw-r--r-- | src/sss_client/common.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/sss_client/common.c b/src/sss_client/common.c index 5b175159..1ef3ba15 100644 --- a/src/sss_client/common.c +++ b/src/sss_client/common.c @@ -195,6 +195,7 @@ static enum sss_status sss_cli_recv_rep(enum sss_cli_command cmd, uint32_t header[4]; size_t datarecv; uint8_t *buf = NULL; + bool pollhup = false; int len; int ret; @@ -235,7 +236,10 @@ static enum sss_status sss_cli_recv_rep(enum sss_cli_command cmd, *errnop = ETIME; break; case 1: - if (pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) { + if (pfd.revents & (POLLHUP)) { + pollhup = true; + } + if (pfd.revents & (POLLERR | POLLNVAL)) { *errnop = EPIPE; } if (!(pfd.revents & POLLIN)) { @@ -322,6 +326,10 @@ static enum sss_status sss_cli_recv_rep(enum sss_cli_command cmd, } } + if (pollhup) { + sss_cli_close_socket(); + } + *_len = len; *_buf = buf; |