-if ((ret = writev(fd, iov, 2)) != total_len)
- log_write(0, LOG_MAIN|LOG_PANIC_DIE,
- "Failed writing transport result to pipe (%ld of %ld bytes): %s",
- (long)ret, (long)total_len, ret == -1 ? strerror(errno) : "short write");
+for (int retries = 10; retries > 0; retries--)
+ {
+ if ((ret = writev(fd, iov, 2)) == total_len) return;
+ if (ret != -1 || errno != EINTR) break;
+ }
+log_write(0, LOG_MAIN|LOG_PANIC_DIE,
+ "Failed writing transport result to pipe (%ld of %ld bytes): %s",
+ (long)ret, (long)total_len, ret == -1 ? strerror(errno) : "short write");