mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-10 23:08:07 +00:00
Remove dependency on mstcpip.h for windows build by making curl version >= 7.25.0 mandatory on windows builds, and use curl functions for keepalive whenever possible instead.
This commit is contained in:
parent
01b9c6dfbf
commit
8fcc67f308
@ -358,7 +358,13 @@ fi
|
|||||||
AC_SUBST(LIBUSB_LIBS)
|
AC_SUBST(LIBUSB_LIBS)
|
||||||
AC_SUBST(LIBUSB_CFLAGS)
|
AC_SUBST(LIBUSB_CFLAGS)
|
||||||
|
|
||||||
PKG_CHECK_MODULES([LIBCURL], [libcurl >= 7.18.2], ,[AC_MSG_ERROR([Missing required libcurl dev >= 7.18.2])])
|
if test "x$have_win32" != xtrue; then
|
||||||
|
PKG_CHECK_MODULES([LIBCURL], [libcurl >= 7.25.0], [AC_DEFINE([CURL_HAS_KEEPALIVE], [1], [Defined if version of curl supports keepalive.])],
|
||||||
|
[PKG_CHECK_MODULES([LIBCURL], [libcurl >= 7.18.2], ,[AC_MSG_ERROR([Missing required libcurl dev >= 7.18.2])])])
|
||||||
|
else
|
||||||
|
PKG_CHECK_MODULES([LIBCURL], [libcurl >= 7.25.0], ,[AC_MSG_ERROR([Missing required libcurl dev >= 7.25.0])])
|
||||||
|
AC_DEFINE([CURL_HAS_KEEPALIVE], [1])
|
||||||
|
fi
|
||||||
AC_SUBST(LIBCURL_LIBS)
|
AC_SUBST(LIBCURL_LIBS)
|
||||||
|
|
||||||
dnl CCAN wants to know a lot of vars.
|
dnl CCAN wants to know a lot of vars.
|
||||||
|
64
util.c
64
util.c
@ -29,7 +29,6 @@
|
|||||||
# include <netdb.h>
|
# include <netdb.h>
|
||||||
#else
|
#else
|
||||||
# include <winsock2.h>
|
# include <winsock2.h>
|
||||||
# include <mstcpip.h>
|
|
||||||
# include <ws2tcpip.h>
|
# include <ws2tcpip.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -196,16 +195,30 @@ out:
|
|||||||
return ptrlen;
|
return ptrlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CURL_HAS_KEEPALIVE
|
||||||
|
static void keep_curlalive(CURL *curl)
|
||||||
|
{
|
||||||
|
const int tcp_keepidle = 60;
|
||||||
|
const int tcp_keepintvl = 60;
|
||||||
|
const long int keepalive = 1;
|
||||||
|
|
||||||
|
curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, keepalive);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, tcp_keepidle);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, tcp_keepintvl);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keep_alive(CURL *curl, __maybe_unused SOCKETTYPE fd)
|
||||||
|
{
|
||||||
|
keep_curlalive(curl);
|
||||||
|
}
|
||||||
|
#else
|
||||||
static int keep_sockalive(SOCKETTYPE fd)
|
static int keep_sockalive(SOCKETTYPE fd)
|
||||||
{
|
{
|
||||||
const int tcp_keepidle = 60;
|
const int tcp_keepidle = 60;
|
||||||
const int tcp_keepintvl = 60;
|
const int tcp_keepintvl = 60;
|
||||||
const int keepalive = 1;
|
const int keepalive = 1;
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef WIN32
|
|
||||||
const int tcp_keepcnt = 5;
|
const int tcp_keepcnt = 5;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (unlikely(setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive))))
|
if (unlikely(setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive))))
|
||||||
ret = 1;
|
ret = 1;
|
||||||
@ -228,38 +241,23 @@ static int keep_sockalive(SOCKETTYPE fd)
|
|||||||
|
|
||||||
# endif /* __APPLE_CC__ */
|
# endif /* __APPLE_CC__ */
|
||||||
|
|
||||||
#else /* WIN32 */
|
|
||||||
|
|
||||||
const int zero = 0;
|
|
||||||
struct tcp_keepalive vals;
|
|
||||||
vals.onoff = 1;
|
|
||||||
vals.keepalivetime = tcp_keepidle * 1000;
|
|
||||||
vals.keepaliveinterval = tcp_keepintvl * 1000;
|
|
||||||
|
|
||||||
DWORD outputBytes;
|
|
||||||
|
|
||||||
if (unlikely(setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const char *)&keepalive, sizeof(keepalive))))
|
|
||||||
ret = 1;
|
|
||||||
|
|
||||||
if (unlikely(WSAIoctl(fd, SIO_KEEPALIVE_VALS, &vals, sizeof(vals), NULL, 0, &outputBytes, NULL, NULL)))
|
|
||||||
ret = 1;
|
|
||||||
|
|
||||||
/* Windows happily submits indefinitely to the send buffer blissfully
|
|
||||||
* unaware nothing is getting there without gracefully failing unless
|
|
||||||
* we disable the send buffer */
|
|
||||||
if (unlikely(setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (const char *)&zero, sizeof(zero))))
|
|
||||||
ret = 1;
|
|
||||||
#endif /* WIN32 */
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int json_rpc_call_sockopt_cb(void __maybe_unused *userdata, curl_socket_t fd,
|
static void keep_curlalive(CURL *curl)
|
||||||
curlsocktype __maybe_unused purpose)
|
|
||||||
{
|
{
|
||||||
return keep_sockalive(fd);
|
SOCKETTYPE sock;
|
||||||
|
|
||||||
|
curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, (long *)&sock);
|
||||||
|
keep_sockalive(sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void keep_alive(CURL __maybe_unused *curl, SOCKETTYPE fd)
|
||||||
|
{
|
||||||
|
keep_sockalive(fd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void last_nettime(struct timeval *last)
|
static void last_nettime(struct timeval *last)
|
||||||
{
|
{
|
||||||
rd_lock(&netacc_lock);
|
rd_lock(&netacc_lock);
|
||||||
@ -334,7 +332,7 @@ json_t *json_rpc_call(CURL *curl, const char *url,
|
|||||||
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
|
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
|
||||||
}
|
}
|
||||||
if (longpoll)
|
if (longpoll)
|
||||||
curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, json_rpc_call_sockopt_cb);
|
keep_curlalive(curl);
|
||||||
curl_easy_setopt(curl, CURLOPT_POST, 1);
|
curl_easy_setopt(curl, CURLOPT_POST, 1);
|
||||||
|
|
||||||
if (opt_protocol)
|
if (opt_protocol)
|
||||||
@ -1362,7 +1360,7 @@ bool initiate_stratum(struct pool *pool)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, (long *)&pool->sock);
|
curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, (long *)&pool->sock);
|
||||||
keep_sockalive(pool->sock);
|
keep_alive(curl, pool->sock);
|
||||||
|
|
||||||
sprintf(s, "{\"id\": %d, \"method\": \"mining.subscribe\", \"params\": []}", swork_id++);
|
sprintf(s, "{\"id\": %d, \"method\": \"mining.subscribe\", \"params\": []}", swork_id++);
|
||||||
|
|
||||||
|
@ -43,29 +43,6 @@ Make sure to check the option for "Download latest repository catalogs".
|
|||||||
I just selected all the check boxes (excluding "Fortran Compiler") so that everything
|
I just selected all the check boxes (excluding "Fortran Compiler") so that everything
|
||||||
was installed.
|
was installed.
|
||||||
|
|
||||||
**************************************************************************************
|
|
||||||
* Create mstcpip.h *
|
|
||||||
**************************************************************************************
|
|
||||||
Open notepad and copy the following into it. Save it as "\MinGW\include\mstcpip.h".
|
|
||||||
Make sure it does not have the ".txt" extension (If it does then rename it).
|
|
||||||
|
|
||||||
struct tcp_keepalive
|
|
||||||
{
|
|
||||||
u_long onoff;
|
|
||||||
u_long keepalivetime;
|
|
||||||
u_long keepaliveinterval;
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifndef USE_WS_PREFIX
|
|
||||||
|
|
||||||
#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR, 4)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define WS_SIO_KEEPALIVE_VALS _WSAIOW(WS_IOC_VENDOR, 4)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
**************************************************************************************
|
**************************************************************************************
|
||||||
* Run the MSYS shell for the first time to create your user directory *
|
* Run the MSYS shell for the first time to create your user directory *
|
||||||
**************************************************************************************
|
**************************************************************************************
|
||||||
|
Loading…
Reference in New Issue
Block a user