diff --git a/cgminer.c b/cgminer.c index 98498202..401de946 100644 --- a/cgminer.c +++ b/cgminer.c @@ -4643,7 +4643,7 @@ static void *stratum_thread(void *userdata) /* Check to see whether we need to maintain this connection * indefinitely or just bring it up when we switch to this * pool */ - if (!cnx_needed(pool)) { + if (!sock_full(pool, false) && !cnx_needed(pool)) { suspend_stratum(pool); clear_stratum_shares(pool); clear_pool_work(pool); @@ -4668,7 +4668,7 @@ static void *stratum_thread(void *userdata) * every minute so if we fail to receive any for 90 seconds we * assume the connection has been dropped and treat this pool * as dead */ - if (unlikely(select(pool->sock + 1, &rd, NULL, NULL, &timeout) < 1)) + if (!sock_full(pool, false) && select(pool->sock + 1, &rd, NULL, NULL, &timeout) < 1) s = NULL; else s = recv_line(pool); diff --git a/util.c b/util.c index 32d95d28..74270d59 100644 --- a/util.c +++ b/util.c @@ -930,7 +930,7 @@ bool stratum_send(struct pool *pool, char *s, ssize_t len) } /* Check to see if Santa's been good to you */ -static bool sock_full(struct pool *pool, bool wait) +bool sock_full(struct pool *pool, bool wait) { SOCKETTYPE sock = pool->sock; struct timeval timeout; diff --git a/util.h b/util.h index 253b61d7..ed4c9f51 100644 --- a/util.h +++ b/util.h @@ -46,6 +46,7 @@ struct pool; enum dev_reason; struct cgpu_info; bool stratum_send(struct pool *pool, char *s, ssize_t len); +bool sock_full(struct pool *pool, bool wait); char *recv_line(struct pool *pool); bool parse_method(struct pool *pool, char *s); bool extract_sockaddr(struct pool *pool, char *url);