There should be no error response code with return value 0 in recv_line.
diff --git a/util.c b/util.c
index b00417e..94c62ec 100644
--- a/util.c
+++ b/util.c
@@ -1104,19 +1104,17 @@ char *recv_line(struct pool *pool)
memset(s, 0, RBUFSIZE);
n = recv(pool->sock, s, RECVSIZE, 0);
- if (n < 1) {
- if (errno != EAGAIN && errno != EWOULDBLOCK) {
- if (n == 0)
- ret = RECV_CLOSED;
- else
- ret = RECV_RECVFAIL;
- break;
- }
- } else {
- slen = strlen(s);
- recalloc_sock(pool, slen);
- strcat(pool->sockbuf, s);
+ if (!n) {
+ ret = RECV_CLOSED;
+ break;
+ }
+ if (n < 0 && errno != EAGAIN && errno != EWOULDBLOCK) {
+ ret = RECV_RECVFAIL;
+ break;
}
+ slen = strlen(s);
+ recalloc_sock(pool, slen);
+ strcat(pool->sockbuf, s);
cgtime(&now);
} while (tdiff(&now, &rstart) < 60 && !strstr(pool->sockbuf, "\n"));
mutex_unlock(&pool->stratum_lock);