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:
parent
d1d83d7e7f
commit
618314985d
4 changed files with 51 additions and 2 deletions
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue