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