src: Retry write(2) if errno == EINTR

This commit is contained in:
Tatsuhiro Tsujikawa 2014-07-17 23:41:54 +09:00
parent 62423f5949
commit 61053653df
2 changed files with 8 additions and 3 deletions

View File

@ -1027,7 +1027,11 @@ void prepare_status_response(Stream *stream, Http2Handler *hd,
gzclose(write_fd);
headers.emplace_back("content-encoding", "gzip");
} else {
auto rv = write(pipefd[1], body.c_str(), body.size());
ssize_t rv;
while((rv = write(pipefd[1], body.c_str(), body.size())) == -1 &&
errno == EINTR);
if(rv != static_cast<ssize_t>(body.size())) {
std::cerr << "Could not write all response body: " << rv << std::endl;
}

View File

@ -137,7 +137,7 @@ Log::~Log()
auto nwrite = std::min(static_cast<size_t>(rv), sizeof(buf) - 1);
write(worker_config.errorlog_fd, buf, nwrite);
while(write(worker_config.errorlog_fd, buf, nwrite) == -1 && errno == EINTR);
}
void upstream_accesslog(const std::string& client_ip, unsigned int status_code,
@ -208,7 +208,8 @@ void upstream_accesslog(const std::string& client_ip, unsigned int status_code,
return;
}
write(worker_config.accesslog_fd, buf, nwrite);
while(write(worker_config.accesslog_fd, buf, nwrite) == -1 &&
errno == EINTR);
}
int reopen_log_files()