Merge pull request #4115
e27c411
Remove build-time no-IPv6 setting (Wladimir J. van der Laan)
This commit is contained in:
commit
bf35cae1ae
6 changed files with 0 additions and 101 deletions
45
configure.ac
45
configure.ac
|
@ -62,13 +62,6 @@ AC_ARG_ENABLE([upnp-default],
|
||||||
[use_upnp_default=$enableval],
|
[use_upnp_default=$enableval],
|
||||||
[use_upnp_default=no])
|
[use_upnp_default=no])
|
||||||
|
|
||||||
dnl enable ipv6 support
|
|
||||||
AC_ARG_ENABLE([ipv6],
|
|
||||||
[AS_HELP_STRING([--enable-ipv6],
|
|
||||||
[enable ipv6 (default is yes)])],
|
|
||||||
[use_ipv6=$enableval],
|
|
||||||
[use_ipv6=yes])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(tests,
|
AC_ARG_ENABLE(tests,
|
||||||
AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
|
AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
|
||||||
[use_tests=$enableval],
|
[use_tests=$enableval],
|
||||||
|
@ -560,27 +553,6 @@ AC_MSG_RESULT($build_bitcoin_cli)
|
||||||
dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
|
dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
|
||||||
BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
|
BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
|
||||||
|
|
||||||
|
|
||||||
if test x$use_ipv6 = xyes; then
|
|
||||||
dnl Check for ipv6 build requirements
|
|
||||||
AC_MSG_CHECKING(for operating system IPv6 support)
|
|
||||||
AC_TRY_LINK([
|
|
||||||
#if defined(_WINDOWS)
|
|
||||||
#include <winsock2.h>
|
|
||||||
#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#endif
|
|
||||||
],[
|
|
||||||
#if !defined(_WINDOWS)
|
|
||||||
struct in6_addr ipv6Addr;
|
|
||||||
struct sockaddr_in6 addr;
|
|
||||||
#endif
|
|
||||||
int temp = socket(AF_INET6, SOCK_STREAM, 0);],
|
|
||||||
[AC_MSG_RESULT(yes); have_ipv6=yes; AC_DEFINE(HAVE_IPV6, 1, [Define this symbol if you have operating system IPv6 support])],
|
|
||||||
[AC_MSG_RESULT(no)]; have_ipv6=no)
|
|
||||||
fi
|
|
||||||
AC_LANG_POP
|
AC_LANG_POP
|
||||||
|
|
||||||
if test "x$use_ccache" != "xno"; then
|
if test "x$use_ccache" != "xno"; then
|
||||||
|
@ -609,22 +581,6 @@ else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl enable ipv6 support
|
|
||||||
AC_MSG_CHECKING([whether to build with support for IPv6])
|
|
||||||
if test x$have_ipv6 = xno; then
|
|
||||||
if test x$use_ipv6 = xyes; then
|
|
||||||
AC_MSG_ERROR([IPv6 requested, but cannot be built. use --disable-ipv6])
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
else
|
|
||||||
if test x$use_ipv6 = xyes; then
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE([USE_IPV6],[1],[Define if IPv6 support should be compiled in])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl enable upnp support
|
dnl enable upnp support
|
||||||
AC_MSG_CHECKING([whether to build with support for UPnP])
|
AC_MSG_CHECKING([whether to build with support for UPnP])
|
||||||
if test x$have_miniupnpc = xno; then
|
if test x$have_miniupnpc = xno; then
|
||||||
|
@ -730,7 +686,6 @@ AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
|
||||||
|
|
||||||
AC_SUBST(USE_UPNP)
|
AC_SUBST(USE_UPNP)
|
||||||
AC_SUBST(USE_QRCODE)
|
AC_SUBST(USE_QRCODE)
|
||||||
AC_SUBST(USE_IPV6)
|
|
||||||
AC_SUBST(INCLUDES)
|
AC_SUBST(INCLUDES)
|
||||||
AC_SUBST(BOOST_LIBS)
|
AC_SUBST(BOOST_LIBS)
|
||||||
AC_SUBST(TESTDEFS)
|
AC_SUBST(TESTDEFS)
|
||||||
|
|
|
@ -32,10 +32,6 @@ turned off by default. See the configure options for upnp behavior desired:
|
||||||
--disable-upnp-default (the default) UPnP support turned off by default at runtime
|
--disable-upnp-default (the default) UPnP support turned off by default at runtime
|
||||||
--enable-upnp-default UPnP support turned on by default at runtime
|
--enable-upnp-default UPnP support turned on by default at runtime
|
||||||
|
|
||||||
IPv6 support may be disabled by setting:
|
|
||||||
|
|
||||||
--disable-ipv6 Disable IPv6 support
|
|
||||||
|
|
||||||
Licenses of statically linked libraries:
|
Licenses of statically linked libraries:
|
||||||
Berkeley DB New BSD license with additional requirement that linked
|
Berkeley DB New BSD license with additional requirement that linked
|
||||||
software must be free open source
|
software must be free open source
|
||||||
|
|
10
src/init.cpp
10
src/init.cpp
|
@ -689,12 +689,6 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
SetLimited(net);
|
SetLimited(net);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(USE_IPV6)
|
|
||||||
#if ! USE_IPV6
|
|
||||||
else
|
|
||||||
SetLimited(NET_IPV6);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CService addrProxy;
|
CService addrProxy;
|
||||||
bool fProxy = false;
|
bool fProxy = false;
|
||||||
|
@ -706,10 +700,8 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
if (!IsLimited(NET_IPV4))
|
if (!IsLimited(NET_IPV4))
|
||||||
SetProxy(NET_IPV4, addrProxy, nSocksVersion);
|
SetProxy(NET_IPV4, addrProxy, nSocksVersion);
|
||||||
if (nSocksVersion > 4) {
|
if (nSocksVersion > 4) {
|
||||||
#ifdef USE_IPV6
|
|
||||||
if (!IsLimited(NET_IPV6))
|
if (!IsLimited(NET_IPV6))
|
||||||
SetProxy(NET_IPV6, addrProxy, nSocksVersion);
|
SetProxy(NET_IPV6, addrProxy, nSocksVersion);
|
||||||
#endif
|
|
||||||
SetNameProxy(addrProxy, nSocksVersion);
|
SetNameProxy(addrProxy, nSocksVersion);
|
||||||
}
|
}
|
||||||
fProxy = true;
|
fProxy = true;
|
||||||
|
@ -751,9 +743,7 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
else {
|
else {
|
||||||
struct in_addr inaddr_any;
|
struct in_addr inaddr_any;
|
||||||
inaddr_any.s_addr = INADDR_ANY;
|
inaddr_any.s_addr = INADDR_ANY;
|
||||||
#ifdef USE_IPV6
|
|
||||||
fBound |= Bind(CService(in6addr_any, GetListenPort()), BF_NONE);
|
fBound |= Bind(CService(in6addr_any, GetListenPort()), BF_NONE);
|
||||||
#endif
|
|
||||||
fBound |= Bind(CService(inaddr_any, GetListenPort()), !fBound ? BF_REPORT_ERROR : BF_NONE);
|
fBound |= Bind(CService(inaddr_any, GetListenPort()), !fBound ? BF_REPORT_ERROR : BF_NONE);
|
||||||
}
|
}
|
||||||
if (!fBound)
|
if (!fBound)
|
||||||
|
|
12
src/net.cpp
12
src/net.cpp
|
@ -917,11 +917,7 @@ void ThreadSocketHandler()
|
||||||
BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket)
|
BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket)
|
||||||
if (hListenSocket != INVALID_SOCKET && FD_ISSET(hListenSocket, &fdsetRecv))
|
if (hListenSocket != INVALID_SOCKET && FD_ISSET(hListenSocket, &fdsetRecv))
|
||||||
{
|
{
|
||||||
#ifdef USE_IPV6
|
|
||||||
struct sockaddr_storage sockaddr;
|
struct sockaddr_storage sockaddr;
|
||||||
#else
|
|
||||||
struct sockaddr sockaddr;
|
|
||||||
#endif
|
|
||||||
socklen_t len = sizeof(sockaddr);
|
socklen_t len = sizeof(sockaddr);
|
||||||
SOCKET hSocket = accept(hListenSocket, (struct sockaddr*)&sockaddr, &len);
|
SOCKET hSocket = accept(hListenSocket, (struct sockaddr*)&sockaddr, &len);
|
||||||
CAddress addr;
|
CAddress addr;
|
||||||
|
@ -1582,11 +1578,7 @@ bool BindListenPort(const CService &addrBind, string& strError)
|
||||||
int nOne = 1;
|
int nOne = 1;
|
||||||
|
|
||||||
// Create socket for listening for incoming connections
|
// Create socket for listening for incoming connections
|
||||||
#ifdef USE_IPV6
|
|
||||||
struct sockaddr_storage sockaddr;
|
struct sockaddr_storage sockaddr;
|
||||||
#else
|
|
||||||
struct sockaddr sockaddr;
|
|
||||||
#endif
|
|
||||||
socklen_t len = sizeof(sockaddr);
|
socklen_t len = sizeof(sockaddr);
|
||||||
if (!addrBind.GetSockAddr((struct sockaddr*)&sockaddr, &len))
|
if (!addrBind.GetSockAddr((struct sockaddr*)&sockaddr, &len))
|
||||||
{
|
{
|
||||||
|
@ -1627,7 +1619,6 @@ bool BindListenPort(const CService &addrBind, string& strError)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_IPV6
|
|
||||||
// some systems don't have IPV6_V6ONLY but are always v6only; others do have the option
|
// some systems don't have IPV6_V6ONLY but are always v6only; others do have the option
|
||||||
// and enable it by default or not. Try to enable it, if possible.
|
// and enable it by default or not. Try to enable it, if possible.
|
||||||
if (addrBind.IsIPv6()) {
|
if (addrBind.IsIPv6()) {
|
||||||
|
@ -1645,7 +1636,6 @@ bool BindListenPort(const CService &addrBind, string& strError)
|
||||||
setsockopt(hListenSocket, IPPROTO_IPV6, nParameterId, (const char*)&nProtLevel, sizeof(int));
|
setsockopt(hListenSocket, IPPROTO_IPV6, nParameterId, (const char*)&nProtLevel, sizeof(int));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (::bind(hListenSocket, (struct sockaddr*)&sockaddr, len) == SOCKET_ERROR)
|
if (::bind(hListenSocket, (struct sockaddr*)&sockaddr, len) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
|
@ -1712,7 +1702,6 @@ void static Discover(boost::thread_group& threadGroup)
|
||||||
if (AddLocal(addr, LOCAL_IF))
|
if (AddLocal(addr, LOCAL_IF))
|
||||||
LogPrintf("IPv4 %s: %s\n", ifa->ifa_name, addr.ToString());
|
LogPrintf("IPv4 %s: %s\n", ifa->ifa_name, addr.ToString());
|
||||||
}
|
}
|
||||||
#ifdef USE_IPV6
|
|
||||||
else if (ifa->ifa_addr->sa_family == AF_INET6)
|
else if (ifa->ifa_addr->sa_family == AF_INET6)
|
||||||
{
|
{
|
||||||
struct sockaddr_in6* s6 = (struct sockaddr_in6*)(ifa->ifa_addr);
|
struct sockaddr_in6* s6 = (struct sockaddr_in6*)(ifa->ifa_addr);
|
||||||
|
@ -1720,7 +1709,6 @@ void static Discover(boost::thread_group& threadGroup)
|
||||||
if (AddLocal(addr, LOCAL_IF))
|
if (AddLocal(addr, LOCAL_IF))
|
||||||
LogPrintf("IPv6 %s: %s\n", ifa->ifa_name, addr.ToString());
|
LogPrintf("IPv6 %s: %s\n", ifa->ifa_name, addr.ToString());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
freeifaddrs(myaddrs);
|
freeifaddrs(myaddrs);
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,11 +78,7 @@ bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, unsign
|
||||||
|
|
||||||
aiHint.ai_socktype = SOCK_STREAM;
|
aiHint.ai_socktype = SOCK_STREAM;
|
||||||
aiHint.ai_protocol = IPPROTO_TCP;
|
aiHint.ai_protocol = IPPROTO_TCP;
|
||||||
#ifdef USE_IPV6
|
|
||||||
aiHint.ai_family = AF_UNSPEC;
|
aiHint.ai_family = AF_UNSPEC;
|
||||||
#else
|
|
||||||
aiHint.ai_family = AF_INET;
|
|
||||||
#endif
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
aiHint.ai_flags = fAllowLookup ? 0 : AI_NUMERICHOST;
|
aiHint.ai_flags = fAllowLookup ? 0 : AI_NUMERICHOST;
|
||||||
#else
|
#else
|
||||||
|
@ -102,13 +98,11 @@ bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, unsign
|
||||||
vIP.push_back(CNetAddr(((struct sockaddr_in*)(aiTrav->ai_addr))->sin_addr));
|
vIP.push_back(CNetAddr(((struct sockaddr_in*)(aiTrav->ai_addr))->sin_addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_IPV6
|
|
||||||
if (aiTrav->ai_family == AF_INET6)
|
if (aiTrav->ai_family == AF_INET6)
|
||||||
{
|
{
|
||||||
assert(aiTrav->ai_addrlen >= sizeof(sockaddr_in6));
|
assert(aiTrav->ai_addrlen >= sizeof(sockaddr_in6));
|
||||||
vIP.push_back(CNetAddr(((struct sockaddr_in6*)(aiTrav->ai_addr))->sin6_addr));
|
vIP.push_back(CNetAddr(((struct sockaddr_in6*)(aiTrav->ai_addr))->sin6_addr));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
aiTrav = aiTrav->ai_next;
|
aiTrav = aiTrav->ai_next;
|
||||||
}
|
}
|
||||||
|
@ -321,11 +315,7 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
|
||||||
{
|
{
|
||||||
hSocketRet = INVALID_SOCKET;
|
hSocketRet = INVALID_SOCKET;
|
||||||
|
|
||||||
#ifdef USE_IPV6
|
|
||||||
struct sockaddr_storage sockaddr;
|
struct sockaddr_storage sockaddr;
|
||||||
#else
|
|
||||||
struct sockaddr sockaddr;
|
|
||||||
#endif
|
|
||||||
socklen_t len = sizeof(sockaddr);
|
socklen_t len = sizeof(sockaddr);
|
||||||
if (!addrConnect.GetSockAddr((struct sockaddr*)&sockaddr, &len)) {
|
if (!addrConnect.GetSockAddr((struct sockaddr*)&sockaddr, &len)) {
|
||||||
LogPrintf("Cannot connect to %s: unsupported network\n", addrConnect.ToString());
|
LogPrintf("Cannot connect to %s: unsupported network\n", addrConnect.ToString());
|
||||||
|
@ -585,12 +575,10 @@ CNetAddr::CNetAddr(const struct in_addr& ipv4Addr)
|
||||||
memcpy(ip+12, &ipv4Addr, 4);
|
memcpy(ip+12, &ipv4Addr, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_IPV6
|
|
||||||
CNetAddr::CNetAddr(const struct in6_addr& ipv6Addr)
|
CNetAddr::CNetAddr(const struct in6_addr& ipv6Addr)
|
||||||
{
|
{
|
||||||
memcpy(ip, &ipv6Addr, 16);
|
memcpy(ip, &ipv6Addr, 16);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
CNetAddr::CNetAddr(const char *pszIp, bool fAllowLookup)
|
CNetAddr::CNetAddr(const char *pszIp, bool fAllowLookup)
|
||||||
{
|
{
|
||||||
|
@ -764,11 +752,7 @@ std::string CNetAddr::ToStringIP() const
|
||||||
if (IsTor())
|
if (IsTor())
|
||||||
return EncodeBase32(&ip[6], 10) + ".onion";
|
return EncodeBase32(&ip[6], 10) + ".onion";
|
||||||
CService serv(*this, 0);
|
CService serv(*this, 0);
|
||||||
#ifdef USE_IPV6
|
|
||||||
struct sockaddr_storage sockaddr;
|
struct sockaddr_storage sockaddr;
|
||||||
#else
|
|
||||||
struct sockaddr sockaddr;
|
|
||||||
#endif
|
|
||||||
socklen_t socklen = sizeof(sockaddr);
|
socklen_t socklen = sizeof(sockaddr);
|
||||||
if (serv.GetSockAddr((struct sockaddr*)&sockaddr, &socklen)) {
|
if (serv.GetSockAddr((struct sockaddr*)&sockaddr, &socklen)) {
|
||||||
char name[1025] = "";
|
char name[1025] = "";
|
||||||
|
@ -813,13 +797,11 @@ bool CNetAddr::GetInAddr(struct in_addr* pipv4Addr) const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_IPV6
|
|
||||||
bool CNetAddr::GetIn6Addr(struct in6_addr* pipv6Addr) const
|
bool CNetAddr::GetIn6Addr(struct in6_addr* pipv6Addr) const
|
||||||
{
|
{
|
||||||
memcpy(pipv6Addr, ip, 16);
|
memcpy(pipv6Addr, ip, 16);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// get canonical identifier of an address' group
|
// get canonical identifier of an address' group
|
||||||
// no two connections will be attempted to addresses with the same group
|
// no two connections will be attempted to addresses with the same group
|
||||||
|
@ -993,23 +975,19 @@ CService::CService(const struct in_addr& ipv4Addr, unsigned short portIn) : CNet
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_IPV6
|
|
||||||
CService::CService(const struct in6_addr& ipv6Addr, unsigned short portIn) : CNetAddr(ipv6Addr), port(portIn)
|
CService::CService(const struct in6_addr& ipv6Addr, unsigned short portIn) : CNetAddr(ipv6Addr), port(portIn)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
CService::CService(const struct sockaddr_in& addr) : CNetAddr(addr.sin_addr), port(ntohs(addr.sin_port))
|
CService::CService(const struct sockaddr_in& addr) : CNetAddr(addr.sin_addr), port(ntohs(addr.sin_port))
|
||||||
{
|
{
|
||||||
assert(addr.sin_family == AF_INET);
|
assert(addr.sin_family == AF_INET);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_IPV6
|
|
||||||
CService::CService(const struct sockaddr_in6 &addr) : CNetAddr(addr.sin6_addr), port(ntohs(addr.sin6_port))
|
CService::CService(const struct sockaddr_in6 &addr) : CNetAddr(addr.sin6_addr), port(ntohs(addr.sin6_port))
|
||||||
{
|
{
|
||||||
assert(addr.sin6_family == AF_INET6);
|
assert(addr.sin6_family == AF_INET6);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
bool CService::SetSockAddr(const struct sockaddr *paddr)
|
bool CService::SetSockAddr(const struct sockaddr *paddr)
|
||||||
{
|
{
|
||||||
|
@ -1017,11 +995,9 @@ bool CService::SetSockAddr(const struct sockaddr *paddr)
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
*this = CService(*(const struct sockaddr_in*)paddr);
|
*this = CService(*(const struct sockaddr_in*)paddr);
|
||||||
return true;
|
return true;
|
||||||
#ifdef USE_IPV6
|
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
*this = CService(*(const struct sockaddr_in6*)paddr);
|
*this = CService(*(const struct sockaddr_in6*)paddr);
|
||||||
return true;
|
return true;
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1093,7 +1069,6 @@ bool CService::GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const
|
||||||
paddrin->sin_port = htons(port);
|
paddrin->sin_port = htons(port);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#ifdef USE_IPV6
|
|
||||||
if (IsIPv6()) {
|
if (IsIPv6()) {
|
||||||
if (*addrlen < (socklen_t)sizeof(struct sockaddr_in6))
|
if (*addrlen < (socklen_t)sizeof(struct sockaddr_in6))
|
||||||
return false;
|
return false;
|
||||||
|
@ -1106,7 +1081,6 @@ bool CService::GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const
|
||||||
paddrin6->sin6_port = htons(port);
|
paddrin6->sin6_port = htons(port);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,10 +77,8 @@ class CNetAddr
|
||||||
int GetReachabilityFrom(const CNetAddr *paddrPartner = NULL) const;
|
int GetReachabilityFrom(const CNetAddr *paddrPartner = NULL) const;
|
||||||
void print() const;
|
void print() const;
|
||||||
|
|
||||||
#ifdef USE_IPV6
|
|
||||||
CNetAddr(const struct in6_addr& pipv6Addr);
|
CNetAddr(const struct in6_addr& pipv6Addr);
|
||||||
bool GetIn6Addr(struct in6_addr* pipv6Addr) const;
|
bool GetIn6Addr(struct in6_addr* pipv6Addr) const;
|
||||||
#endif
|
|
||||||
|
|
||||||
friend bool operator==(const CNetAddr& a, const CNetAddr& b);
|
friend bool operator==(const CNetAddr& a, const CNetAddr& b);
|
||||||
friend bool operator!=(const CNetAddr& a, const CNetAddr& b);
|
friend bool operator!=(const CNetAddr& a, const CNetAddr& b);
|
||||||
|
@ -121,10 +119,8 @@ class CService : public CNetAddr
|
||||||
std::string ToStringIPPort() const;
|
std::string ToStringIPPort() const;
|
||||||
void print() const;
|
void print() const;
|
||||||
|
|
||||||
#ifdef USE_IPV6
|
|
||||||
CService(const struct in6_addr& ipv6Addr, unsigned short port);
|
CService(const struct in6_addr& ipv6Addr, unsigned short port);
|
||||||
CService(const struct sockaddr_in6& addr);
|
CService(const struct sockaddr_in6& addr);
|
||||||
#endif
|
|
||||||
|
|
||||||
IMPLEMENT_SERIALIZE
|
IMPLEMENT_SERIALIZE
|
||||||
(
|
(
|
||||||
|
|
Loading…
Reference in a new issue