text: //
  // blocking_udp_echo_server.cpp
  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  //
  // Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
  //
  // Distributed under the Boost Software License, Version 1.0. (See accompanying
  // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  //
  
  #include <cstdlib>
  #include <iostream>
  #include "asio.hpp"
  
  using asio::ip::udp;
  
  enum { max_length = 1024 };
  
  void server(asio::io_context& io_context, unsigned short port)
  {
    udp::socket sock(io_context, udp::endpoint(udp::v4(), port));
    for (;;)
    {
      char data[max_length];
      udp::endpoint sender_endpoint;
      size_t length = sock.receive_from(
          asio::buffer(data, max_length), sender_endpoint);
      sock.send_to(asio::buffer(data, length), sender_endpoint);
    }
  }
  
  int main(int argc, char* argv[])
  {
    try
    {
      if (argc != 2)
      {
        std::cerr << "Usage: blocking_udp_echo_server <port>\n";
        return 1;
      }
  
      asio::io_context io_context;
  
      server(io_context, std::atoi(argv[1]));
    }
    catch (std::exception& e)
    {
      std::cerr << "Exception: " << e.what() << "\n";
    }
  
    return 0;
  }
  