______ ______ _____ _____ ____
|___ / | ____| | __ \ |_ _| / __ \
/ / | |__ | | | | | | | | | |
/ / | __| | | | | | | | | | |
/ /__ | |____ | |__| | _| |_ | |__| |
/_____| |______| |_____/ |_____| \____/
Documentation: https://8sileus.github.io/zedio/
Zedio is an event-driven header library for writing asynchronous applications in modern C++:
- Multithreaded, work-stealing based task scheduler. (reference tokio)
- Proactor event handling backed by io_uring.
- Zero overhead abstraction, no virtual, no dynamic
- I/O
- NetWorking
- FileSystem
- Time
- Sync
- Log
It's being developed, if you're interested in zedio and want to participate in its development, see contributing
// An echo server
// Ignore all errors
#include "zedio/core.hpp"
#include "zedio/net.hpp"
using namespace zedio;
using namespace zedio::async;
using namespace zedio::net;
auto process(TcpStream stream) -> Task<void> {
char buf[1024]{};
while (true) {
auto len = (co_await (stream.read(buf))).value();
if (len == 0) {
break;
}
co_await stream.write_all({buf, len});
}
}
auto server() -> Task<void> {
auto addr = SocketAddr::parse("localhost", 9999).value();
auto listener = TcpListener::bind(addr).value();
while (true) {
auto [stream, addr] = (co_await listener.accept()).value();
spawn(process(std::move(stream)));
}
}
auto main() -> int {
Runtime::create().block_on(server());
}