Check for errors on stratum recv for any recv return value less than 1 and only parse the response if it's positive.
diff --git a/util.c b/util.c
index 6cbb84a..ddbff5f 100644
--- a/util.c
+++ b/util.c
@@ -1104,17 +1104,19 @@ char *recv_line(struct pool *pool)
memset(s, 0, RBUFSIZE);
n = recv(pool->sock, s, RECVSIZE, 0);
- if (!n) {
- ret = RECV_CLOSED;
- break;
- }
- if (n < 0 && errno != EAGAIN && errno != EWOULDBLOCK) {
- ret = RECV_RECVFAIL;
- break;
+ 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);
}
- 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);