Browse Source

Check for errors on stratum recv for any recv return value less than 1 and only parse the response if it's positive.

Conflicts:
	util.c
Con Kolivas 12 years ago
parent
commit
1fe0575b93
1 changed files with 12 additions and 10 deletions
  1. 12 10
      util.c

+ 12 - 10
util.c

@@ -1137,17 +1137,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);
 			gettimeofday(&now, NULL);
 		} while (tdiff(&now, &rstart) < 60 && !strstr(pool->sockbuf, "\n"));
 		mutex_unlock(&pool->stratum_lock);