Changed writev to sendmsg to prevent SIGPIPE errors

This commit is contained in:
David van Erkelens 2016-07-06 14:08:45 +02:00
parent aad09a1dd2
commit ad9171f226
1 changed files with 15 additions and 6 deletions

View File

@ -224,19 +224,28 @@ public:
// update counter for next iteration
if (++index >= 64) break;
}
// create the message header
struct msghdr header;
// make sure the members of the header are empty
memset(&header, 0, sizeof(header));
// save the buffers in the message header
header.msg_iov = buffer;
header.msg_iovlen = index;
// send the data
// @todo use sendmsg() with a MSG_NOSIG flag
auto result = writev(socket, (const struct iovec *)&buffer, index);
auto result = sendmsg(socket, &header, MSG_NOSIGNAL);
// skip on error, or when nothing was written
if (result <= 0) return total > 0 ? total : result;
// shrink the buffer
shrink(result);
// update total number of bytes written
total += 0;
total += result;
}
// done