Merge remote-tracking branch 'bitcoin/0.10' into v0.12.0.x_merge10again
This commit is contained in:
commit
ed6f2b1439
@ -36,6 +36,9 @@ their feature or bug fix is ready.
|
|||||||
If it is a simple/trivial/non-controversial change, then one of the Dash
|
If it is a simple/trivial/non-controversial change, then one of the Dash
|
||||||
development team members simply pulls it.
|
development team members simply pulls it.
|
||||||
|
|
||||||
|
If it is a *more complicated or potentially controversial* change, then the patch
|
||||||
|
submitter will be asked to start a discussion (if they haven't already) on the
|
||||||
|
[mailing list](https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev)
|
||||||
|
|
||||||
The patch will be accepted if there is broad consensus that it is a good thing.
|
The patch will be accepted if there is broad consensus that it is a good thing.
|
||||||
Developers should expect to rework and resubmit patches if the code doesn't
|
Developers should expect to rework and resubmit patches if the code doesn't
|
||||||
|
@ -74,7 +74,7 @@ In the VirtualBox GUI click "Create" and choose the following parameters in the
|
|||||||
- Disk size: at least 40GB; as low as 20GB *may* be possible, but better to err on the safe side
|
- Disk size: at least 40GB; as low as 20GB *may* be possible, but better to err on the safe side
|
||||||
- Push the `Create` button
|
- Push the `Create` button
|
||||||
|
|
||||||
Get the [Debian 7.4 net installer](http://ftp.at.debian.org/debian-jigdo/current/amd64/iso-cd/debian-7.4.0-amd64-netinst.iso) (a more recent minor version should also work, see also [Debian Network installation](https://www.debian.org/CD/netinst/)).
|
Get the [Debian 7.8 net installer](http://cdimage.debian.org/cdimage/archive/7.8.0/amd64/iso-cd/debian-7.8.0-amd64-netinst.iso) (a more recent minor version should also work, see also [Debian Network installation](https://www.debian.org/CD/netinst/)).
|
||||||
This DVD image can be validated using a SHA256 hashing tool, for example on
|
This DVD image can be validated using a SHA256 hashing tool, for example on
|
||||||
Unixy OSes by entering the following in a terminal:
|
Unixy OSes by entering the following in a terminal:
|
||||||
|
|
||||||
|
@ -90,4 +90,12 @@ typedef u_int SOCKET;
|
|||||||
|
|
||||||
size_t strnlen_int( const char *start, size_t max_len);
|
size_t strnlen_int( const char *start, size_t max_len);
|
||||||
|
|
||||||
|
bool static inline IsSelectableSocket(SOCKET s) {
|
||||||
|
#ifdef WIN32
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
return (s < FD_SETSIZE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif // BITCOIN_COMPAT_H
|
#endif // BITCOIN_COMPAT_H
|
||||||
|
19
src/net.cpp
19
src/net.cpp
@ -415,6 +415,12 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest, bool darkSendMaste
|
|||||||
if (pszDest ? ConnectSocketByName(addrConnect, hSocket, pszDest, Params().GetDefaultPort(), nConnectTimeout, &proxyConnectionFailed) :
|
if (pszDest ? ConnectSocketByName(addrConnect, hSocket, pszDest, Params().GetDefaultPort(), nConnectTimeout, &proxyConnectionFailed) :
|
||||||
ConnectSocket(addrConnect, hSocket, nConnectTimeout, &proxyConnectionFailed))
|
ConnectSocket(addrConnect, hSocket, nConnectTimeout, &proxyConnectionFailed))
|
||||||
{
|
{
|
||||||
|
if (!IsSelectableSocket(hSocket)) {
|
||||||
|
LogPrintf("Cannot create connection: non-selectable socket created (fd >= FD_SETSIZE ?)\n");
|
||||||
|
CloseSocket(hSocket);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
addrman.Attempt(addrConnect);
|
addrman.Attempt(addrConnect);
|
||||||
|
|
||||||
// Add node
|
// Add node
|
||||||
@ -884,8 +890,14 @@ void ThreadSocketHandler()
|
|||||||
if (nErr != WSAEWOULDBLOCK)
|
if (nErr != WSAEWOULDBLOCK)
|
||||||
LogPrintf("socket error accept failed: %s\n", NetworkErrorString(nErr));
|
LogPrintf("socket error accept failed: %s\n", NetworkErrorString(nErr));
|
||||||
}
|
}
|
||||||
|
else if (!IsSelectableSocket(hSocket))
|
||||||
|
{
|
||||||
|
LogPrintf("connection from %s dropped: non-selectable socket\n", addr.ToString());
|
||||||
|
CloseSocket(hSocket);
|
||||||
|
}
|
||||||
else if (nInbound >= nMaxConnections - MAX_OUTBOUND_CONNECTIONS)
|
else if (nInbound >= nMaxConnections - MAX_OUTBOUND_CONNECTIONS)
|
||||||
{
|
{
|
||||||
|
LogPrint("net", "connection from %s dropped (full)\n", addr.ToString());
|
||||||
CloseSocket(hSocket);
|
CloseSocket(hSocket);
|
||||||
}
|
}
|
||||||
else if (CNode::IsBanned(addr) && !whitelisted)
|
else if (CNode::IsBanned(addr) && !whitelisted)
|
||||||
@ -1515,6 +1527,13 @@ bool BindListenPort(const CService &addrBind, string& strError, bool fWhiteliste
|
|||||||
LogPrintf("%s\n", strError);
|
LogPrintf("%s\n", strError);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!IsSelectableSocket(hListenSocket))
|
||||||
|
{
|
||||||
|
strError = "Error: Couldn't create a listenable socket for incoming connections";
|
||||||
|
LogPrintf("%s\n", strError);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
#ifdef SO_NOSIGPIPE
|
#ifdef SO_NOSIGPIPE
|
||||||
|
@ -267,6 +267,9 @@ bool static InterruptibleRecv(char* data, size_t len, int timeout, SOCKET& hSock
|
|||||||
} else { // Other error or blocking
|
} else { // Other error or blocking
|
||||||
int nErr = WSAGetLastError();
|
int nErr = WSAGetLastError();
|
||||||
if (nErr == WSAEINPROGRESS || nErr == WSAEWOULDBLOCK || nErr == WSAEINVAL) {
|
if (nErr == WSAEINPROGRESS || nErr == WSAEWOULDBLOCK || nErr == WSAEINVAL) {
|
||||||
|
if (!IsSelectableSocket(hSocket)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
struct timeval tval = MillisToTimeval(std::min(endTime - curTime, maxWait));
|
struct timeval tval = MillisToTimeval(std::min(endTime - curTime, maxWait));
|
||||||
fd_set fdset;
|
fd_set fdset;
|
||||||
FD_ZERO(&fdset);
|
FD_ZERO(&fdset);
|
||||||
|
@ -87,6 +87,7 @@
|
|||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
|
#include <openssl/conf.h>
|
||||||
|
|
||||||
// Work around clang compilation problem in Boost 1.46:
|
// Work around clang compilation problem in Boost 1.46:
|
||||||
// /usr/include/boost/program_options/detail/config_file.hpp:163:17: error: call to function 'to_internal' that is neither visible in the template definition nor found by argument-dependent lookup
|
// /usr/include/boost/program_options/detail/config_file.hpp:163:17: error: call to function 'to_internal' that is neither visible in the template definition nor found by argument-dependent lookup
|
||||||
@ -154,6 +155,13 @@ public:
|
|||||||
ppmutexOpenSSL[i] = new CCriticalSection();
|
ppmutexOpenSSL[i] = new CCriticalSection();
|
||||||
CRYPTO_set_locking_callback(locking_callback);
|
CRYPTO_set_locking_callback(locking_callback);
|
||||||
|
|
||||||
|
// OpenSSL can optionally load a config file which lists optional loadable modules and engines.
|
||||||
|
// We don't use them so we don't require the config. However some of our libs may call functions
|
||||||
|
// which attempt to load the config file, possibly resulting in an exit() or crash if it is missing
|
||||||
|
// or corrupt. Explicitly tell OpenSSL not to try to load the file. The result for our libs will be
|
||||||
|
// that the config appears to have been loaded and there are no modules/engines available.
|
||||||
|
OPENSSL_no_config();
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
// Seed OpenSSL PRNG with current contents of the screen
|
// Seed OpenSSL PRNG with current contents of the screen
|
||||||
RAND_screen();
|
RAND_screen();
|
||||||
|
Loading…
Reference in New Issue
Block a user