Commit e95695dbc74def52f87d497fd7c0a09d5b2bf997

Con Kolivas 2013-04-24T20:44:41

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);