* or implied warranty.
*/
+#include <signal.h>
+
#include <gsscon.h>
/* --------------------------------------------------------------------------- */
if (!err) {
const char *ptr = inBuffer;
do {
- ssize_t count = write (inSocket, ptr, inBufferLength - bytesWritten);
+ ssize_t count;
+
+ /* disable the SIGPIPE signal while we write so that we can handle a
+ * broken pipe error gracefully */
+ signal(SIGPIPE, SIG_IGN); /* temporarily disable */
+ count = write (inSocket, ptr, inBufferLength - bytesWritten);
+ signal(SIGPIPE, SIG_DFL); /* reenable */
+
if (count < 0) {
/* Try again on EINTR */
if (errno != EINTR) { err = errno; }
} while (!err && (bytesWritten < inBufferLength));
}
- if (err) { gsscon_print_error (err, "WritBuffer failed"); }
+ if (err) { gsscon_print_error (err, "WriteBuffer failed"); }
return err;
}