Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "echo.hpp"
- namespace echo {
- EchoServer::EchoServer(uint16_t port) {
- auto status = acceptor_.Listen(port);
- }
- void EchoServer::ServeForever() {
- while (true) {
- tinyfiber::Result<tinyfiber::tcp::Socket> accepted = acceptor_.Accept();
- if (accepted.Error()) {
- std::cout << accepted.Error().message() << "\n";
- return;
- }
- std::shared_ptr<tinyfiber::tcp::Socket> echo_connection = std::make_shared<tinyfiber::tcp::Socket>(std::move(accepted.Value()));
- tinyfiber::Spawn([echo_connection = echo_connection]() {
- const size_t kBufSize = 1024;
- char buf[kBufSize];
- while (true) {
- auto read = echo_connection->ReadSome(asio::buffer(buf, kBufSize));
- if (!read.IsOk()) {
- if (!read.MatchErrorCode(asio::error::eof)) {
- std::cout << read.Error().message() << "\n";
- }
- break;
- }
- if (read.Value() == 0) {
- break;
- }
- auto write = echo_connection->Write(asio::buffer(buf, read.Value()));
- if (!write.IsOk()) {
- std::cout << write.Error().message() << "\n";
- break;
- }
- }
- echo_connection->ShutdownWrite();
- });
- }
- }
- } // namespace echo
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement