msg.msg_iov = &iov;
msg.msg_iovlen = 1;
- return sendmsg(fd, &msg, 0);
+ return sendmsg(fd, &msg, MSG_NOSIGNAL);
}
int lxc_abstract_unix_recv_fd(int fd, int *recvfd, void *data, size_t size)
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
- return sendmsg(fd, &msg, 0);
+ return sendmsg(fd, &msg, MSG_NOSIGNAL);
}
int lxc_abstract_unix_rcv_credential(int fd, void *data, size_t size)
ret = lxc_abstract_unix_send_credential(sock, &cmd->req, sizeof(cmd->req));
if (ret != sizeof(cmd->req)) {
+ if (errno == EPIPE)
+ goto epipe;
SYSERROR("command %s failed to send req to '@%s' %d",
lxc_cmd_str(cmd->req.cmd), offset, ret);
if (ret >=0)
}
if (cmd->req.datalen > 0) {
- ret = send(sock, cmd->req.data, cmd->req.datalen, 0);
+ ret = send(sock, cmd->req.data, cmd->req.datalen, MSG_NOSIGNAL);
if (ret != cmd->req.datalen) {
+ if (errno == EPIPE)
+ goto epipe;
SYSERROR("command %s failed to send request data to '@%s' %d",
lxc_cmd_str(cmd->req.cmd), offset, ret);
if (ret >=0)
cmd->rsp.ret = sock;
return ret;
+
+epipe:
+ close(sock);
+ *stopped = 1;
+ return 0;
}
int lxc_try_cmd(const char *name, const char *lxcpath)