#include #include #include #include void listen(uvw::Loop &loop) { std::shared_ptr tcp = loop.resource(); tcp->once([](const uvw::ListenEvent &, uvw::TcpHandle &srv) { std::shared_ptr client = srv.loop().resource(); client->on([ptr = srv.shared_from_this()](const uvw::CloseEvent &, uvw::TcpHandle &) { ptr->close(); }); client->on([](const uvw::EndEvent &, uvw::TcpHandle &client) { client.close(); }); srv.accept(*client); client->read(); }); tcp->bind("127.0.0.1", 4242); tcp->listen(); } void conn(uvw::Loop &loop) { auto tcp = loop.resource(); tcp->on([](const uvw::ErrorEvent &, uvw::TcpHandle &) { /* handle errors */ }); tcp->once([](const uvw::ConnectEvent &, uvw::TcpHandle &tcp) { auto dataWrite = std::unique_ptr(new char[2]{ 'b', 'c' }); tcp.write(std::move(dataWrite), 2); tcp.close(); }); tcp->connect(std::string{"127.0.0.1"}, 4242); } int main() { std::cout << "Getting UVW loop ...\n"; auto loop = uvw::Loop::getDefault(); std::cout << "Staring UVW listener ...\n"; listen(*loop); std::cout << "Connecting ...\n"; conn(*loop); loop->run(); std::cout << "Done!\n"; return EXIT_SUCCESS; }