Merge pull request #3263 from orestisf1993/misbehaving-ipc-queue-2999

Kill misbehaving subscribed clients instead of hanging
This commit is contained in:
Michael Stapelberg
2018-08-08 19:14:15 +02:00
committed by GitHub
10 changed files with 305 additions and 22 deletions

View File

@ -68,10 +68,9 @@ int sasprintf(char **strp, const char *fmt, ...) {
ssize_t writeall(int fd, const void *buf, size_t count) {
size_t written = 0;
ssize_t n = 0;
while (written < count) {
n = write(fd, buf + written, count - written);
const ssize_t n = write(fd, buf + written, count - written);
if (n == -1) {
if (errno == EINTR || errno == EAGAIN)
continue;
@ -83,6 +82,25 @@ ssize_t writeall(int fd, const void *buf, size_t count) {
return written;
}
ssize_t writeall_nonblock(int fd, const void *buf, size_t count) {
size_t written = 0;
while (written < count) {
const ssize_t n = write(fd, buf + written, count - written);
if (n == -1) {
if (errno == EAGAIN) {
return written;
} else if (errno == EINTR) {
continue;
} else {
return n;
}
}
written += (size_t)n;
}
return written;
}
ssize_t swrite(int fd, const void *buf, size_t count) {
ssize_t n;