Use alternate dns name if name resolution fails for internet server (6dns.org seems to be unreliable, but is still the only one to provide both ipv4 and ipv6 name resolution for free).
This commit is contained in:
1 parent
3838b2e22f
commit
b97c56cd26
5 files changed
+31
-2
No files matched your search
@@ -70,7 +70,8 @@ ClientThread::~ClientThread()
|
||||
|
||||
void
|
||||
ClientThread::Init(
|
||||
const string &serverAddress, unsigned serverPort, bool ipv6, bool sctp,
|
||||
const string &serverAddress, const string &alternateServerAddress,
|
||||
unsigned serverPort, bool ipv6, bool sctp,
|
||||
const string &pwd, const string &playerName, const string &avatarFile)
|
||||
{
|
||||
if (IsRunning())
|
||||
@@ -84,6 +85,7 @@ ClientThread::Init(
|
||||
context.SetProtocol(sctp ? SOCKET_IPPROTO_SCTP : 0);
|
||||
context.SetAddrFamily(ipv6 ? AF_INET6 : AF_INET);
|
||||
context.SetServerAddr(serverAddress);
|
||||
context.SetAlternateServerAddr(alternateServerAddress);
|
||||
context.SetServerPort(serverPort);
|
||||
context.SetPassword(pwd);
|
||||
context.SetPlayerName(playerName);
|
||||
|
||||
@@ -45,6 +45,7 @@ ResolverThread::Init(const ClientContext &context)
|
||||
|
||||
GetContext().SetAddrFamily(context.GetAddrFamily());
|
||||
GetContext().SetServerAddr(context.GetServerAddr());
|
||||
GetContext().SetAlternateServerAddr(context.GetAlternateServerAddr());
|
||||
GetContext().SetServerPort(context.GetServerPort());
|
||||
}
|
||||
|
||||
@@ -78,6 +79,19 @@ ResolverThread::Main()
|
||||
context.GetProtocol(),
|
||||
(struct sockaddr *)context.GetClientSockaddr(),
|
||||
context.GetClientSockaddrSize());
|
||||
|
||||
if (!m_retVal && !context.GetAlternateServerAddr().empty())
|
||||
{
|
||||
// Try alternate name.
|
||||
m_retVal = socket_resolve(
|
||||
context.GetAlternateServerAddr().c_str(),
|
||||
tmpStr.str().c_str(),
|
||||
context.GetAddrFamily(),
|
||||
SOCK_STREAM,
|
||||
context.GetProtocol(),
|
||||
(struct sockaddr *)context.GetClientSockaddr(),
|
||||
context.GetClientSockaddrSize());
|
||||
}
|
||||
}
|
||||
|
||||
const ClientContext &
|
||||
|
||||
Reference in new issue
Block a user