aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-06-19 04:04:21 -0300
committerariel- <ariel-@users.noreply.github.com>2017-06-19 04:04:21 -0300
commit7874bee7bfb70e0e039f91173cff212e9572de09 (patch)
tree337bda90265f92d4d89187f2261a68c7a717092b /src/server/game
parent46cb32c99f51a564313a520841eac81de9de963a (diff)
Core/Misc: Cleanup worldserver/authserver main() functions to run destructors in predictable order
* world/auth servers will now fail to startup if listen ports are in use * Restored "Network.OutUBuff" config option lost during boost transition (cherry picked from commit 6c92a481a34eb19c7ba751a1f7547a39c3d3a088)
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Server/WorldSocket.cpp6
-rw-r--r--src/server/game/Server/WorldSocket.h3
-rw-r--r--src/server/game/Server/WorldSocketMgr.cpp18
-rw-r--r--src/server/game/Server/WorldSocketMgr.h6
4 files changed, 20 insertions, 13 deletions
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index b22d87038ba..ae8b3fd0998 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -40,7 +40,7 @@ private:
using boost::asio::ip::tcp;
WorldSocket::WorldSocket(tcp::socket&& socket)
- : Socket(std::move(socket)), _authSeed(rand32()), _OverSpeedPings(0), _worldSession(nullptr), _authed(false)
+ : Socket(std::move(socket)), _authSeed(rand32()), _OverSpeedPings(0), _worldSession(nullptr), _authed(false), _sendBufferSize(4096)
{
_headerBuffer.Resize(sizeof(ClientPktHeader));
}
@@ -87,7 +87,7 @@ void WorldSocket::CheckIpCallback(PreparedQueryResult result)
bool WorldSocket::Update()
{
EncryptablePacket* queued;
- MessageBuffer buffer;
+ MessageBuffer buffer(_sendBufferSize);
while (_bufferQueue.Dequeue(queued))
{
ServerPktHeader header(queued->size() + 2, queued->GetOpcode());
@@ -97,7 +97,7 @@ bool WorldSocket::Update()
if (buffer.GetRemainingSpace() < queued->size() + header.getHeaderLength())
{
QueuePacket(std::move(buffer));
- buffer.Resize(4096);
+ buffer.Resize(_sendBufferSize);
}
if (buffer.GetRemainingSpace() >= queued->size() + header.getHeaderLength())
diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h
index 36ce6528beb..e8ea99cdb88 100644
--- a/src/server/game/Server/WorldSocket.h
+++ b/src/server/game/Server/WorldSocket.h
@@ -67,6 +67,8 @@ public:
void SendPacket(WorldPacket const& packet);
+ void SetSendBufferSize(std::size_t sendBufferSize) { _sendBufferSize = sendBufferSize; }
+
protected:
void OnClose() override;
void ReadHandler() override;
@@ -110,6 +112,7 @@ private:
MessageBuffer _headerBuffer;
MessageBuffer _packetBuffer;
MPSCQueue<EncryptablePacket> _bufferQueue;
+ std::size_t _sendBufferSize;
QueryCallbackProcessor _queryProcessor;
std::string _ipCountry;
diff --git a/src/server/game/Server/WorldSocketMgr.cpp b/src/server/game/Server/WorldSocketMgr.cpp
index 6e6fd5cf99f..5c392f23669 100644
--- a/src/server/game/Server/WorldSocketMgr.cpp
+++ b/src/server/game/Server/WorldSocketMgr.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008-2017 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
+ * Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -34,6 +34,7 @@ class WorldSocketThread : public NetworkThread<WorldSocket>
public:
void SocketAdded(std::shared_ptr<WorldSocket> sock) override
{
+ sock->SetSendBufferSize(sWorldSocketMgr.GetApplicationSendBufferSize());
sScriptMgr->OnSocketOpen(sock);
}
@@ -43,7 +44,7 @@ public:
}
};
-WorldSocketMgr::WorldSocketMgr() : BaseSocketMgr(), _socketSendBufferSize(-1), m_SockOutUBuff(65536), _tcpNoDelay(true)
+WorldSocketMgr::WorldSocketMgr() : BaseSocketMgr(), _socketSystemSendBufferSize(-1), _socketApplicationSendBufferSize(65536), _tcpNoDelay(true)
{
}
@@ -61,17 +62,18 @@ bool WorldSocketMgr::StartNetwork(boost::asio::io_service& service, std::string
TC_LOG_DEBUG("misc", "Max allowed socket connections %d", max_connections);
// -1 means use default
- _socketSendBufferSize = sConfigMgr->GetIntDefault("Network.OutKBuff", -1);
+ _socketSystemSendBufferSize = sConfigMgr->GetIntDefault("Network.OutKBuff", -1);
- m_SockOutUBuff = sConfigMgr->GetIntDefault("Network.OutUBuff", 65536);
+ _socketApplicationSendBufferSize = sConfigMgr->GetIntDefault("Network.OutUBuff", 65536);
- if (m_SockOutUBuff <= 0)
+ if (_socketApplicationSendBufferSize <= 0)
{
TC_LOG_ERROR("misc", "Network.OutUBuff is wrong in your config file");
return false;
}
- BaseSocketMgr::StartNetwork(service, bindIp, port, threadCount);
+ if (!BaseSocketMgr::StartNetwork(service, bindIp, port, threadCount))
+ return false;
_acceptor->SetSocketFactory(std::bind(&BaseSocketMgr::GetSocketForAccept, this));
@@ -91,10 +93,10 @@ void WorldSocketMgr::StopNetwork()
void WorldSocketMgr::OnSocketOpen(tcp::socket&& sock, uint32 threadIndex)
{
// set some options here
- if (_socketSendBufferSize >= 0)
+ if (_socketSystemSendBufferSize >= 0)
{
boost::system::error_code err;
- sock.set_option(boost::asio::socket_base::send_buffer_size(_socketSendBufferSize), err);
+ sock.set_option(boost::asio::socket_base::send_buffer_size(_socketSystemSendBufferSize), err);
if (err && err != boost::system::errc::not_supported)
{
TC_LOG_ERROR("misc", "WorldSocketMgr::OnSocketOpen sock.set_option(boost::asio::socket_base::send_buffer_size) err = %s", err.message().c_str());
diff --git a/src/server/game/Server/WorldSocketMgr.h b/src/server/game/Server/WorldSocketMgr.h
index a5aee344bf7..ce81acfea78 100644
--- a/src/server/game/Server/WorldSocketMgr.h
+++ b/src/server/game/Server/WorldSocketMgr.h
@@ -45,14 +45,16 @@ public:
void OnSocketOpen(tcp::socket&& sock, uint32 threadIndex) override;
+ std::size_t GetApplicationSendBufferSize() const { return _socketApplicationSendBufferSize; }
+
protected:
WorldSocketMgr();
NetworkThread<WorldSocket>* CreateThreads() const override;
private:
- int32 _socketSendBufferSize;
- int32 m_SockOutUBuff;
+ int32 _socketSystemSendBufferSize;
+ int32 _socketApplicationSendBufferSize;
bool _tcpNoDelay;
};