aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/shared/Networking/Socket.h13
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__