#include <reactor/network/exception.hh> | |
#include <reactor/network/tcp-server.hh> | |
#include <reactor/scheduler.hh> | |
int main(int argc, char* argv[]) | |
{ | |
try | |
{ | |
if (argc != 2) | |
{ | |
std::cerr << "Usage: " << argv[0] << " <port>" << std::endl; | |
return 1; | |
} | |
reactor::Scheduler sched; | |
reactor::Thread acceptor( | |
sched, "acceptor", [&] | |
{ | |
reactor::network::TCPServer server; | |
server.listen(std::atoi(argv[1])); | |
std::vector<std::unique_ptr<reactor::Thread>> client_threads; | |
while (true) | |
{ | |
std::shared_ptr<reactor::network::Socket> socket = server.accept(); | |
client_threads.emplace_back( | |
new reactor::Thread( | |
sched, "serve", | |
[socket] | |
{ | |
try | |
{ | |
while (true) | |
{ | |
elle::Buffer line = socket->read_until("\n"); | |
socket->write(line); | |
} | |
} | |
catch (reactor::network::ConnectionClosed const&) | |
{} | |
})); | |
} | |
}); | |
sched.run(); | |
} | |
catch (std::exception const& e) | |
{ | |
std::cerr << "fatal error: " << e.what() << std::endl; | |
return 1; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment