diff options
| -rw-r--r-- | src/server/shared/Networking/Socket.h | 13 | 
1 files changed, 9 insertions, 4 deletions
diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h index 4a3f2990799..9d46d7130bc 100644 --- a/src/server/shared/Networking/Socket.h +++ b/src/server/shared/Networking/Socket.h @@ -40,10 +40,9 @@ class Socket : public std::enable_shared_from_this<T>      typedef typename std::conditional<std::is_pointer<PacketType>::value, PacketType, PacketType const&>::type WritePacketType;  public: -    Socket(tcp::socket&& socket, std::size_t headerSize) : _socket(std::move(socket)) +    Socket(tcp::socket&& socket, std::size_t headerSize) : _socket(std::move(socket)), _remoteAddress(_socket.remote_endpoint().address()), +        _remotePort(_socket.remote_endpoint().port()), _readHeaderBuffer(), _readDataBuffer(), _closed(false)      { -        _remoteAddress = _socket.remote_endpoint().address(); -        _remotePort = _socket.remote_endpoint().port();          _readHeaderBuffer.Grow(headerSize);      } @@ -105,9 +104,13 @@ public:              std::placeholders::_1, std::placeholders::_2));      } -    bool IsOpen() const { return _socket.is_open(); } +    bool IsOpen() const { return !_closed; } +      void CloseSocket()      { +        if (_closed.exchange(true)) +            return; +          boost::system::error_code shutdownError;          _socket.shutdown(boost::asio::socket_base::shutdown_both, shutdownError);          if (shutdownError) @@ -217,6 +220,8 @@ private:      MessageBuffer _readHeaderBuffer;      MessageBuffer _readDataBuffer; + +    std::atomic<bool> _closed;  };  #endif // __SOCKET_H__  | 
