It might be simplest to begin with a short bit of code:
covent::task<int> async_main() {
auto hw = "Hello World!";
for (auto c : hw) {
std::cout << c;
co_await covent::sleep(0.1);
}
std::cout << std::endl;
co_return 0;
}
int main() {
// Make a loop.
covent::Loop loop;
// Run the task.
return loop.run_task(async_main());
}
That code will execute the coroutine in an event loop. The coroutine prints Hello World a character at a time, sleeping (not really - suspending) for a tenth of a second between each character.
You can do more fun than that - like open a TCP session to somewhere with loop.add<Session>(...), and then calling session->connect(...) on the result. For which you'll need a sockaddr, which you can get from the resolver object - which you can configure to require DNSSEC, or inject weird records of your choosing into, or ...
And if you needed TLS, then of course there's a PKIX validator that's similarly tunable. And why yes, it will chase down DNSSEC records to add additional names, and fetch CRLs asynchronously, and ...
HTTP? Yes, there's an HTTP/1.1 library included, both server and client. The server is modelled as endpoints and middleware, so should be vaguely familiar to people who've seen Express.
Covent is built with, and intended to be consumed with, Conan 2.
I do run a Conan repository with it in, at https://nexus.cridland.io/