X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Funix.c;h=1d4ee9b3686b1a38efa2d74cf7bc6c2939be95ee;hb=refs%2Fheads%2Fnotification-items-3-4;hp=11c30781ba02ea5fa81f84e7f7400e15bb4436ce;hpb=d30b2041e3a5db2d1671219ea845057cb3dd3082;p=lttng-tools.git diff --git a/src/common/unix.c b/src/common/unix.c index 11c30781b..1d4ee9b36 100644 --- a/src/common/unix.c +++ b/src/common/unix.c @@ -226,7 +226,7 @@ ssize_t lttcomm_send_unix_sock(int sock, const void *buf, size_t len) { struct msghdr msg; struct iovec iov[1]; - ssize_t ret = -1; + ssize_t ret; memset(&msg, 0, sizeof(msg)); @@ -235,17 +235,28 @@ ssize_t lttcomm_send_unix_sock(int sock, const void *buf, size_t len) msg.msg_iov = iov; msg.msg_iovlen = 1; - ret = sendmsg(sock, &msg, 0); - if (ret < 0) { - /* - * Only warn about EPIPE when quiet mode is deactivated. - * We consider EPIPE as expected. - */ - if (errno != EPIPE || !lttng_opt_quiet) { - PERROR("sendmsg"); + while (iov[0].iov_len) { + ret = sendmsg(sock, &msg, 0); + if (ret < 0) { + if (errno == EINTR) { + continue; + } else { + /* + * Only warn about EPIPE when quiet mode is + * deactivated. + * We consider EPIPE as expected. + */ + if (errno != EPIPE || !lttng_opt_quiet) { + PERROR("sendmsg"); + } + goto end; + } } + iov[0].iov_len -= ret; + iov[0].iov_base += ret; } - + ret = len; +end: return ret; }