aboutsummaryrefslogtreecommitdiff
path: root/src/common/network/Socket.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/network/Socket.h')
-rw-r--r--src/common/network/Socket.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/common/network/Socket.h b/src/common/network/Socket.h
index 565cc175318..e91d3198b58 100644
--- a/src/common/network/Socket.h
+++ b/src/common/network/Socket.h
@@ -44,6 +44,13 @@ enum class SocketReadCallbackResult
Stop
};
+inline boost::asio::mutable_buffer PrepareReadBuffer(MessageBuffer& readBuffer)
+{
+ readBuffer.Normalize();
+ readBuffer.EnsureFreeSpace();
+ return boost::asio::buffer(readBuffer.GetWritePointer(), readBuffer.GetRemainingSpace());
+}
+
template <typename Callable>
concept SocketReadCallback = Trinity::invocable_r<Callable, SocketReadCallbackResult>;
@@ -82,6 +89,10 @@ struct ReadConnectionInitializer final : SocketConnectionInitializer
@tparam Stream stream type used for operations on socket
Stream must implement the following methods:
+ boost::asio::io_context::executor_type get_executor();
+
+ bool is_open() const;
+
void close(boost::system::error_code& error);
void shutdown(boost::asio::socket_base::shutdown_type what, boost::system::error_code& shutdownError);
@@ -164,9 +175,7 @@ public:
if (!IsOpen())
return;
- _readBuffer.Normalize();
- _readBuffer.EnsureFreeSpace();
- _socket.async_read_some(boost::asio::buffer(_readBuffer.GetWritePointer(), _readBuffer.GetRemainingSpace()),
+ _socket.async_read_some(PrepareReadBuffer(_readBuffer),
[self = this->shared_from_this(), callback = std::forward<Callback>(callback)](boost::system::error_code const& error, size_t transferredBytes) mutable
{
if (self->ReadHandlerInternal(error, transferredBytes))