From: Wouter Wijngaards Date: Tue, 12 Jun 2018 10:50:51 +0000 (+0000) Subject: Continue to read also when signals are sent. X-Git-Tag: release-1.7.3rc1~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=21af42a2816151f87ae266e861581563684c9bc2;p=thirdparty%2Funbound.git Continue to read also when signals are sent. git-svn-id: file:///svn/unbound/trunk@4723 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/daemon/remote.c b/daemon/remote.c index ecd1e5f16..ee248498f 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -614,14 +614,19 @@ ssl_read_line(RES* res, char* buf, size_t max) return 0; } } else { - ssize_t rr = read(res->fd, buf+len, 1); - if(rr <= 0) { - if(rr == 0) { - buf[len] = 0; - return 1; + while(1) { + ssize_t rr = read(res->fd, buf+len, 1); + if(rr <= 0) { + if(rr == 0) { + buf[len] = 0; + return 1; + } + if(errno == EINTR || errno == EAGAIN) + continue; + log_err("could not read: %s", strerror(errno)); + return 0; } - log_err("could not read: %s", strerror(errno)); - return 0; + break; } } if(buf[len] == '\n') { @@ -2935,13 +2940,18 @@ handle_req(struct daemon_remote* rc, struct rc_state* s, RES* res) return; } } else { - ssize_t rr = read(res->fd, magic, sizeof(magic)-1); - if(rr < (ssize_t)sizeof(magic)-1) { - if(rr == 0) return; - log_err("could not read: %s", strerror(errno)); - return; + while(1) { + ssize_t rr = read(res->fd, magic, sizeof(magic)-1); + if(rr <= 0) { + if(rr == 0) return; + if(errno == EINTR || errno == EAGAIN) + continue; + log_err("could not read: %s", strerror(errno)); + return; + } + r = (int)rr; + break; } - r = (int)rr; } magic[6] = 0; if( r != 6 || strncmp(magic, "UBCT", 4) != 0) {