'c++ ASIO - equivalent of C#'s TaskCompletionSource
I'm attempting to use asio's coroutines in C++ to have a TCP client that listens for responses to requests from the server (like RPC, but in TCP). I am using the standalone version, rather than with Boost. I have working code on the server side (written in C#) using a TaskCompletionSource. Basic C# pseudocode:
TaskCompletionSource<Packet> packetAwaiter = new();
SocketHandler.RegisterAwaiter(packetAwaiter);
m_Socket.Send(requestPacket);
Packet result = await packetAwaiter.Task;
Where the SocketHandler is doing something like this (C# pseudocode):
var length = await Socket.ReceiveAsync(buffer, SocketFlags.None, linkedTokenSource.Token);
Packet packet = GetPacketFromBuffer(buffer);
TaskCompletionSource<Packet> awaiter = GetPacketAwaiter(...);
awaiter.SetResult(packet);
On the C++ side, I have ASIO working on connecting to the server, but I have no idea how to translate the idea of the resumable awaiter. I'd like to do something like this:
asio::ip::tcp::socket serverSocket {...};
std::future<packet> packetAwaiter = ...;
serverSocket.send(asio::buffer{...});
packet result = co_await packetAwaiter;
Are there any source code listings or similar that could show me what is supported? I'm using VS2022 on Windows with vcpkg, if that helps.
Thank you!
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
