diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp
index a9c860608..34923f283 100644
--- a/src/engine/client/client.cpp
+++ b/src/engine/client/client.cpp
@@ -1738,8 +1738,11 @@ void CClient::Run()
// open socket
{
NETADDR BindAddr;
- mem_zero(&BindAddr, sizeof(BindAddr));
- BindAddr.type = NETTYPE_ALL;
+ if(g_Config.m_Bindaddr[0] == 0 || net_host_lookup(g_Config.m_Bindaddr, &BindAddr, NETTYPE_ALL) != 0)
+ {
+ mem_zero(&BindAddr, sizeof(BindAddr));
+ BindAddr.type = NETTYPE_ALL;
+ }
if(!m_NetClient.Open(BindAddr, 0))
{
dbg_msg("client", "couldn't start network");
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index de84ad352..6e63f7472 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -1271,7 +1271,7 @@ int CServer::Run()
// start server
NETADDR BindAddr;
- if(g_Config.m_SvBindaddr[0] && net_host_lookup(g_Config.m_SvBindaddr, &BindAddr, NETTYPE_ALL) == 0)
+ if(g_Config.m_Bindaddr[0] && net_host_lookup(g_Config.m_Bindaddr, &BindAddr, NETTYPE_ALL) == 0)
{
// sweet!
BindAddr.port = g_Config.m_SvPort;
diff --git a/src/engine/shared/config_variables.h b/src/engine/shared/config_variables.h
index d92073d75..f76e69c82 100644
--- a/src/engine/shared/config_variables.h
+++ b/src/engine/shared/config_variables.h
@@ -77,7 +77,7 @@ MACRO_CONFIG_INT(GfxThreaded, gfx_threaded, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT
MACRO_CONFIG_INT(InpMousesens, inp_mousesens, 100, 5, 100000, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Mouse sensitivity")
MACRO_CONFIG_STR(SvName, sv_name, 128, "unnamed server", CFGFLAG_SERVER, "Server name")
-MACRO_CONFIG_STR(SvBindaddr, sv_bindaddr, 128, "", CFGFLAG_SERVER, "Address to bind the server to")
+MACRO_CONFIG_STR(Bindaddr, bindaddr, 128, "", CFGFLAG_CLIENT|CFGFLAG_SERVER|CFGFLAG_MASTER, "Address to bind the client/server to")
MACRO_CONFIG_INT(SvPort, sv_port, 8303, 0, 0, CFGFLAG_SERVER, "Port to use for the server")
MACRO_CONFIG_INT(SvExternalPort, sv_external_port, 0, 0, 0, CFGFLAG_SERVER, "External port to report to the master servers")
MACRO_CONFIG_STR(SvMap, sv_map, 128, "dm1", CFGFLAG_SERVER, "Map to use on the server")
diff --git a/src/mastersrv/mastersrv.cpp b/src/mastersrv/mastersrv.cpp
index 632a524c8..c6099139a 100644
--- a/src/mastersrv/mastersrv.cpp
+++ b/src/mastersrv/mastersrv.cpp
@@ -2,6 +2,7 @@
/* If you are missing that file, acquire a complete release at teeworlds.com. */
#include
+#include
#include
#include
#include
@@ -326,16 +327,40 @@ int main(int argc, const char **argv) // ignore_convention
dbg_logger_stdout();
net_init();
- mem_zero(&BindAddr, sizeof(BindAddr));
- BindAddr.type = NETTYPE_ALL;
- BindAddr.port = MASTERSERVER_PORT;
+ mem_copy(m_CountData.m_Header, SERVERBROWSE_COUNT, sizeof(SERVERBROWSE_COUNT));
+ mem_copy(m_CountDataLegacy.m_Header, SERVERBROWSE_COUNT_LEGACY, sizeof(SERVERBROWSE_COUNT_LEGACY));
+
+ IKernel *pKernel = IKernel::Create();
+ IStorage *pStorage = CreateStorage("Teeworlds", argc, argv);
+ IConfig *pConfig = CreateConfig();
+ m_pConsole = CreateConsole(CFGFLAG_MASTER);
+
+ bool RegisterFail = !pKernel->RegisterInterface(pStorage);
+ RegisterFail |= !pKernel->RegisterInterface(m_pConsole);
+ RegisterFail |= !pKernel->RegisterInterface(pConfig);
+
+ if(RegisterFail)
+ return -1;
+
+ pConfig->Init();
+ m_NetBan.Init(m_pConsole, pStorage);
+ if(argc > 1) // ignore_convention
+ m_pConsole->ParseArguments(argc-1, &argv[1]); // ignore_convention
+
+ if(g_Config.m_Bindaddr[0] && net_host_lookup(g_Config.m_Bindaddr, &BindAddr, NETTYPE_ALL) == 0)
+ BindAddr.port = MASTERSERVER_PORT;
+ else
+ {
+ mem_zero(&BindAddr, sizeof(BindAddr));
+ BindAddr.type = NETTYPE_ALL;
+ BindAddr.port = MASTERSERVER_PORT;
+ }
if(!m_NetOp.Open(BindAddr, 0))
{
dbg_msg("mastersrv", "couldn't start network (op)");
return -1;
}
-
BindAddr.port = MASTERSERVER_PORT+1;
if(!m_NetChecker.Open(BindAddr, 0))
{
@@ -343,21 +368,6 @@ int main(int argc, const char **argv) // ignore_convention
return -1;
}
- mem_copy(m_CountData.m_Header, SERVERBROWSE_COUNT, sizeof(SERVERBROWSE_COUNT));
- mem_copy(m_CountDataLegacy.m_Header, SERVERBROWSE_COUNT_LEGACY, sizeof(SERVERBROWSE_COUNT_LEGACY));
-
- IKernel *pKernel = IKernel::Create();
- IStorage *pStorage = CreateStorage("Teeworlds", argc, argv);
-
- m_pConsole = CreateConsole(CFGFLAG_MASTER);
- m_NetBan.Init(m_pConsole, pStorage);
-
- bool RegisterFail = !pKernel->RegisterInterface(pStorage);
- RegisterFail |= !pKernel->RegisterInterface(m_pConsole);
-
- if(RegisterFail)
- return -1;
-
dbg_msg("mastersrv", "started");
while(1)