| Home | Libraries | People | FAQ | More

# Source listing for Daytime.1

    #include <iostream>
    #include <boost/array.hpp>
    #include <boost/asio.hpp>

    using boost::asio::ip::tcp;

    int main(int argc, char* argv[])
    {
      try
      {
        if (argc != 2)
        {
          std::cerr << "Usage: client <host>" << std::endl;
          return 1;
        }

        boost::asio::io_service io_service;

        tcp::resolver resolver(io_service);
        tcp::resolver::query query(argv[1], "daytime");
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        tcp::resolver::iterator end;

        tcp::socket socket(io_service);
        boost::asio::error error = boost::asio::error::host_not_found;
        while (error && endpoint_iterator != end)
        {
          socket.close();
          socket.connect(*endpoint_iterator++, boost::asio::assign_error(error));
        }
        if (error)
          throw error;

        for (;;)
        {
          boost::array<char, 128> buf;
          boost::asio::error error;

          size_t len = socket.read_some(
              boost::asio::buffer(buf), boost::asio::assign_error(error));

          if (error == boost::asio::error::eof)
            break; // Connection closed cleanly by peer.
          else if (error)
            throw error; // Some other error.

          std::cout.write(buf.data(), len);
        }
      }
      catch (std::exception& e)
      {
        std::cerr << e.what() << std::endl;
      }

      return 0;
    }

Return to Daytime.1 - A synchronous TCP daytime client

| Copyright © 2003 - 2006 Christopher M. Kohlhoff