summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShantanu Goel <sgoel@trade4.test-jc.tower-research.com>2012-06-18 09:26:45 -0400
committerJakub Hrozek <jhrozek@redhat.com>2012-10-01 10:22:11 +0200
commit03cba5149511b28a68329f63de1e00a803f39ff1 (patch)
treea988a4210ad60ba6eb14cadbdcec65d8c998940b
parente23fceda5ed56d9679a4d1aebca054c392965b3e (diff)
downloadsssd-03cba5149511b28a68329f63de1e00a803f39ff1.tar.gz
sssd-03cba5149511b28a68329f63de1e00a803f39ff1.tar.xz
sssd-03cba5149511b28a68329f63de1e00a803f39ff1.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.c27
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;