diff --git a/src/libeis-client.c b/src/libeis-client.c index 0902706..d8b8cc8 100644 --- a/src/libeis-client.c +++ b/src/libeis-client.c @@ -401,10 +401,14 @@ client_dispatch(struct source *source, void *data) _cleanup_iobuf_ struct iobuf *buf = iobuf_new(64); int rc = iobuf_append_from_fd(buf, source_get_fd(source)); - if (rc == -EAGAIN) + if (rc == -EAGAIN) { return; - else if (rc < 0) + } else if (rc == 0) { + rc = -ECANCELED; goto error; + } else if (rc < 0) { + goto error; + } msg = client_parse_message(iobuf_data(buf), iobuf_len(buf)); if (!msg) { diff --git a/src/util-io.h b/src/util-io.h index 71e6e88..4a4d277 100644 --- a/src/util-io.h +++ b/src/util-io.h @@ -127,9 +127,9 @@ iobuf_append_from_fd(struct iobuf *buf, int fd) ssize_t rc; do { rc = xread(fd, data, sizeof(data)); - if (rc <= 0) { - if (rc == -EAGAIN) - return nread; + if (rc == 0 || rc == -EAGAIN) { + break; + } else if (rc < 0) { return rc; }