Use keepalive with stratum sockets to improve its ability to detect broken connections.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
diff --git a/util.c b/util.c
index cd75c8f..115dfe0 100644
--- a/util.c
+++ b/util.c
@@ -196,11 +196,10 @@ out:
return ptrlen;
}
-int json_rpc_call_sockopt_cb(void __maybe_unused *userdata, curl_socket_t fd,
- curlsocktype __maybe_unused purpose)
+static int keep_sockalive(SOCKETTYPE fd)
{
- int tcp_keepidle = 120;
- int tcp_keepintvl = 120;
+ int tcp_keepidle = 60;
+ int tcp_keepintvl = 60;
#ifndef WIN32
int keepalive = 1;
@@ -244,6 +243,12 @@ int json_rpc_call_sockopt_cb(void __maybe_unused *userdata, curl_socket_t fd,
return 0;
}
+int json_rpc_call_sockopt_cb(void __maybe_unused *userdata, curl_socket_t fd,
+ curlsocktype __maybe_unused purpose)
+{
+ return keep_sockalive(fd);
+}
+
static void last_nettime(struct timeval *last)
{
rd_lock(&netacc_lock);
@@ -1347,6 +1352,7 @@ bool initiate_stratum(struct pool *pool)
goto out;
}
curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, (long *)&pool->sock);
+ keep_sockalive(pool->sock);
sprintf(s, "{\"id\": %d, \"method\": \"mining.subscribe\", \"params\": []}", swork_id++);