1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-11 17:51:04 +00:00

Proper handling of failing to bind server socket

This commit is contained in:
Perttu Ahola 2012-03-11 20:45:43 +02:00
parent d1d83d7e7f
commit 618314985d
4 changed files with 51 additions and 2 deletions

View file

@ -109,6 +109,10 @@ void * ServerThread::Thread()
{
infostream<<"Server: PeerNotFoundException"<<std::endl;
}
catch(con::ConnectionBindFailed &e)
{
m_server->setAsyncFatalError(e.what());
}
}
END_DEBUG_EXCEPTION_HANDLER(errorstream)
@ -837,6 +841,7 @@ Server::Server(
m_path_world(path_world),
m_path_config(path_config),
m_gamespec(gamespec),
m_async_fatal_error(""),
m_env(NULL),
m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, this),
m_authmanager(path_world+DIR_DELIM+"auth.txt"),
@ -865,6 +870,9 @@ Server::Server(
m_step_dtime_mutex.Init();
m_step_dtime = 0.0;
if(path_world == "")
throw ServerError("Supplied empty world path");
if(!gamespec.isValid())
throw ServerError("Supplied invalid gamespec");
@ -1079,6 +1087,8 @@ Server::~Server()
void Server::start(unsigned short port)
{
DSTACK(__FUNCTION_NAME);
infostream<<"Starting server on port "<<port<<"..."<<std::endl;
// Stop thread if already running
m_thread.stop();
@ -1128,6 +1138,11 @@ void Server::step(float dtime)
JMutexAutoLock lock(m_step_dtime_mutex);
m_step_dtime += dtime;
}
// Throw if fatal error occurred in thread
std::string async_err = m_async_fatal_error.get();
if(async_err != ""){
throw ServerError(async_err);
}
}
void Server::AsyncRunStep()