diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-06-19 04:04:21 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2017-06-19 04:04:21 -0300 |
| commit | 7874bee7bfb70e0e039f91173cff212e9572de09 (patch) | |
| tree | 337bda90265f92d4d89187f2261a68c7a717092b /src/server/game | |
| parent | 46cb32c99f51a564313a520841eac81de9de963a (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.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSocket.h | 3 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSocketMgr.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSocketMgr.h | 6 |
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; }; |
