diff options
author | Shantanu Goel <sgoel@trade4.test-jc.tower-research.com> | 2012-06-18 09:26:45 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2012-06-18 14:37:59 -0400 |
commit | 2a973054b8b1bdf3752a5d39676f51f78e3207ce (patch) | |
tree | 92afda933be0430e6162c1c2d3267732cd58af84 | |
parent | 3adb3a4ed740aaeb3013020aa8aa9544669197a0 (diff) | |
download | sssd-2a973054b8b1bdf3752a5d39676f51f78e3207ce.tar.gz sssd-2a973054b8b1bdf3752a5d39676f51f78e3207ce.tar.xz sssd-2a973054b8b1bdf3752a5d39676f51f78e3207ce.zip |
Do not send SIGPIPE on disconnection
Note we set MSG_NOSIGNAL to avoid
having to fiddle with signal masks
but also do not want to die in case
SIGPIPE gets raised and the application
does not handle it.
-rw-r--r-- | src/sss_client/common.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/sss_client/common.c b/src/sss_client/common.c index 90713d5b2..9fbb5887c 100644 --- a/src/sss_client/common.c +++ b/src/sss_client/common.c @@ -49,6 +49,19 @@ #include <pthread.h> #endif +/* +* Note we set MSG_NOSIGNAL to avoid +* having to fiddle with signal masks +* but also do not want to die in case +* SIGPIPE gets raised and the application +* does not handle it. +*/ +#ifdef MSG_NOSIGNAL +#define SSS_DEFAULT_WRITE_FLAGS MSG_NOSIGNAL +#else +#define SSS_DEFAULT_WRITE_FLAGS 0 +#endif + /* common functions */ int sss_cli_sd = -1; /* the sss client socket descriptor */ @@ -133,14 +146,16 @@ static enum sss_status sss_cli_send_req(enum sss_cli_command cmd, errno = 0; if (datasent < SSS_NSS_HEADER_SIZE) { - res = write(sss_cli_sd, - (char *)header + datasent, - SSS_NSS_HEADER_SIZE - datasent); + res = send(sss_cli_sd, + (char *)header + datasent, + SSS_NSS_HEADER_SIZE - datasent, + SSS_DEFAULT_WRITE_FLAGS); } else { rdsent = datasent - SSS_NSS_HEADER_SIZE; - res = write(sss_cli_sd, - (const char *)rd->data + rdsent, - rd->len - rdsent); + res = send(sss_cli_sd, + (const char *)rd->data + rdsent, + rd->len - rdsent, + SSS_DEFAULT_WRITE_FLAGS); } error = errno; |