static int do_write(int sockfd, struct msghdr *msg, int len, bool (*need_retry)(uint32_t), uint32_t epoch, uint32_t max_count) { int ret, repeat = max_count; rewrite: ret = sendmsg(sockfd, msg, 0); if (ret < 0) { if (errno == EINTR) goto rewrite; /* * Since we set timeout for write, we'll get EAGAIN even for * blocking sockfd. */ if (errno == EAGAIN && repeat && (need_retry == NULL || need_retry(epoch))) { repeat--; goto rewrite; } sd_err("failed to write to socket: %m"); return 1; } len -= ret; if (len) { forward_iov(msg, ret); goto rewrite; } return 0; }
static int do_write(int sockfd, struct msghdr *msg, int len) { int ret; rewrite: ret = sendmsg(sockfd, msg, 0); if (ret < 0) { if (errno == EINTR) goto rewrite; eprintf("failed to write to socket: %m\n"); return 1; } len -= ret; if (len) { forward_iov(msg, ret); goto rewrite; } return 0; }