Merge pull request #3263 from orestisf1993/misbehaving-ipc-queue-2999
Kill misbehaving subscribed clients instead of hanging
This commit is contained in:
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user