summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/sss_client/common.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/sss_client/common.c b/src/sss_client/common.c
index 5b1751593..1ef3ba15e 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;