Commit d851bf3d65fa87e2aa3e4e1aa2b3fca2d29093fe

Con Kolivas 2012-10-02T10:10:52

Revert "Don't wait on select when first detecting stratum, just receive one line." This reverts commit 496af92afd3e2cfe0d507e7199bc35b17ecee766. Not quite right.

diff --git a/util.c b/util.c
index 13fc2bb..0afd6fb 100644
--- a/util.c
+++ b/util.c
@@ -897,14 +897,18 @@ static void clear_sock(SOCKETTYPE sock)
 }
 
 /* Check to see if Santa's been good to you */
-static bool sock_full(SOCKETTYPE sock)
+static bool sock_full(SOCKETTYPE sock, bool wait)
 {
 	struct timeval timeout;
 	fd_set rd;
 
 	FD_ZERO(&rd);
 	FD_SET(sock, &rd);
-	timeout.tv_usec = timeout.tv_sec = 0;
+	timeout.tv_usec = 0;
+	if (wait)
+		timeout.tv_sec = 60;
+	else
+		timeout.tv_sec = 0;
 	if (select(sock + 1, &rd, NULL, NULL, &timeout) > 0)
 		return true;
 	return false;
@@ -1137,7 +1141,7 @@ bool auth_stratum(struct pool *pool)
 		swork_id++, pool->rpc_user, pool->rpc_pass);
 
 	/* Parse all data prior sending auth request */
-	while (sock_full(pool->sock)) {
+	while (sock_full(pool->sock, false)) {
 		sret = recv_line(pool->sock);
 		if (!parse_method(pool, sret)) {
 			clear_sock(pool->sock);
@@ -1208,6 +1212,11 @@ bool initiate_stratum(struct pool *pool)
 		goto out;
 	}
 
+	if (!sock_full(pool->sock, true)) {
+		applog(LOG_DEBUG, "Timed out waiting for response in initiate_stratum");
+		goto out;
+	}
+
 	sret = recv_line(pool->sock);
 	if (!sret)
 		goto out;