Add C++11 versions of the echo examples.
diff --git a/asio/boostify.pl b/asio/boostify.pl
index 0f8a22c..74c5f9d 100755
--- a/asio/boostify.pl
+++ b/asio/boostify.pl
@@ -470,6 +470,9 @@
       "src/examples/cpp03/tutorial/timer5",
       "src/examples/cpp03/windows",
       "src/examples/cpp11/allocation",
+      "src/examples/cpp11/buffers",
+      "src/examples/cpp11/chat",
+      "src/examples/cpp11/echo",
       "src/examples/cpp11/spawn");
 
   our $boost_dir;
diff --git a/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp b/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp
index 6d9e60a..e93cce9 100644
--- a/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp
+++ b/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp
@@ -44,7 +44,7 @@
   }
 }
 
-void server(asio::io_service& io_service, short port)
+void server(asio::io_service& io_service, unsigned short port)
 {
   tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port));
   for (;;)
diff --git a/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp b/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp
index a4a49ea..46f9870 100644
--- a/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp
+++ b/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp
@@ -16,7 +16,7 @@
 
 enum { max_length = 1024 };
 
-void server(asio::io_service& io_service, short port)
+void server(asio::io_service& io_service, unsigned short port)
 {
   udp::socket sock(io_service, udp::endpoint(udp::v4(), port));
   for (;;)
diff --git a/asio/src/examples/cpp11/Makefile.am b/asio/src/examples/cpp11/Makefile.am
index 04caa6d..d62a797 100644
--- a/asio/src/examples/cpp11/Makefile.am
+++ b/asio/src/examples/cpp11/Makefile.am
@@ -13,7 +13,13 @@
 	allocation/server \
 	buffers/reference_counted \
 	chat/chat_client \
-	chat/chat_server
+	chat/chat_server \
+	echo/async_tcp_echo_server \
+	echo/async_udp_echo_server \
+	echo/blocking_tcp_echo_client \
+	echo/blocking_tcp_echo_server \
+	echo/blocking_udp_echo_client \
+	echo/blocking_udp_echo_server
 
 noinst_HEADERS = \
 	chat/chat_message.hpp
@@ -24,6 +30,12 @@
 buffers_reference_counted_SOURCES = buffers/reference_counted.cpp
 chat_chat_client_SOURCES = chat/chat_client.cpp
 chat_chat_server_SOURCES = chat/chat_server.cpp
+echo_async_tcp_echo_server_SOURCES = echo/async_tcp_echo_server.cpp
+echo_async_udp_echo_server_SOURCES = echo/async_udp_echo_server.cpp
+echo_blocking_tcp_echo_client_SOURCES = echo/blocking_tcp_echo_client.cpp
+echo_blocking_tcp_echo_server_SOURCES = echo/blocking_tcp_echo_server.cpp
+echo_blocking_udp_echo_client_SOURCES = echo/blocking_udp_echo_client.cpp
+echo_blocking_udp_echo_server_SOURCES = echo/blocking_udp_echo_server.cpp
 
 MAINTAINERCLEANFILES = \
 	$(srcdir)/Makefile.in
diff --git a/asio/src/examples/cpp11/echo/.gitignore b/asio/src/examples/cpp11/echo/.gitignore
new file mode 100644
index 0000000..0882fa6
--- /dev/null
+++ b/asio/src/examples/cpp11/echo/.gitignore
@@ -0,0 +1,11 @@
+.deps
+.dirstamp
+*.o
+*.obj
+*.exe
+*_server
+*_client
+*.ilk
+*.manifest
+*.pdb
+*.tds
diff --git a/asio/src/examples/cpp11/echo/async_tcp_echo_server.cpp b/asio/src/examples/cpp11/echo/async_tcp_echo_server.cpp
new file mode 100644
index 0000000..d3a6e9e
--- /dev/null
+++ b/asio/src/examples/cpp11/echo/async_tcp_echo_server.cpp
@@ -0,0 +1,116 @@
+//
+// async_tcp_echo_server.cpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2012 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 <memory>
+#include <utility>
+#include "asio.hpp"
+
+using asio::ip::tcp;
+
+class session
+  : public std::enable_shared_from_this<session>
+{
+public:
+  session(tcp::socket socket)
+    : socket_(std::move(socket))
+  {
+  }
+
+  void start()
+  {
+    do_read();
+  }
+
+private:
+  void do_read()
+  {
+    auto self(shared_from_this());
+    socket_.async_read_some(asio::buffer(data_, max_length),
+        [this, self](std::error_code ec, std::size_t length)
+        {
+          if (!ec)
+          {
+            do_write(length);
+          }
+        });
+  }
+
+  void do_write(std::size_t length)
+  {
+    auto self(shared_from_this());
+    asio::async_write(socket_, asio::buffer(data_, length),
+        [this, self](std::error_code ec, std::size_t /*length*/)
+        {
+          if (!ec)
+          {
+            do_read();
+          }
+        });
+  }
+
+  tcp::socket socket_;
+  enum { max_length = 1024 };
+  char data_[max_length];
+};
+
+class server
+{
+public:
+  server(asio::io_service& io_service, short port)
+    : acceptor_(io_service, tcp::endpoint(tcp::v4(), port)),
+      socket_(io_service)
+  {
+    do_accept();
+  }
+
+private:
+  void do_accept()
+  {
+    acceptor_.async_accept(socket_,
+        [this](std::error_code ec)
+        {
+          if (!ec)
+          {
+            std::make_shared<session>(std::move(socket_))->start();
+          }
+
+          do_accept();
+        });
+  }
+
+  tcp::acceptor acceptor_;
+  tcp::socket socket_;
+};
+
+int main(int argc, char* argv[])
+{
+  try
+  {
+    if (argc != 2)
+    {
+      std::cerr << "Usage: async_tcp_echo_server <port>\n";
+      return 1;
+    }
+
+    asio::io_service io_service;
+
+    server s(io_service, std::atoi(argv[1]));
+
+    io_service.run();
+  }
+  catch (std::exception& e)
+  {
+    std::cerr << "Exception: " << e.what() << "\n";
+  }
+
+  return 0;
+}
diff --git a/asio/src/examples/cpp11/echo/async_udp_echo_server.cpp b/asio/src/examples/cpp11/echo/async_udp_echo_server.cpp
new file mode 100644
index 0000000..a5a448b
--- /dev/null
+++ b/asio/src/examples/cpp11/echo/async_udp_echo_server.cpp
@@ -0,0 +1,82 @@
+//
+// async_udp_echo_server.cpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2012 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;
+
+class server
+{
+public:
+  server(asio::io_service& io_service, short port)
+    : socket_(io_service, udp::endpoint(udp::v4(), port))
+  {
+    do_receive();
+  }
+
+  void do_receive()
+  {
+    socket_.async_receive_from(
+        asio::buffer(data_, max_length), sender_endpoint_,
+        [this](std::error_code ec, std::size_t bytes_recvd)
+        {
+          if (!ec && bytes_recvd > 0)
+          {
+            do_send(bytes_recvd);
+          }
+          else
+          {
+            do_receive();
+          }
+        });
+  }
+
+  void do_send(std::size_t length)
+  {
+    socket_.async_send_to(
+        asio::buffer(data_, length), sender_endpoint_,
+        [this](std::error_code /*ec*/, std::size_t /*bytes_sent*/)
+        {
+          do_receive();
+        });
+  }
+
+private:
+  udp::socket socket_;
+  udp::endpoint sender_endpoint_;
+  enum { max_length = 1024 };
+  char data_[max_length];
+};
+
+int main(int argc, char* argv[])
+{
+  try
+  {
+    if (argc != 2)
+    {
+      std::cerr << "Usage: async_udp_echo_server <port>\n";
+      return 1;
+    }
+
+    asio::io_service io_service;
+
+    server s(io_service, std::atoi(argv[1]));
+
+    io_service.run();
+  }
+  catch (std::exception& e)
+  {
+    std::cerr << "Exception: " << e.what() << "\n";
+  }
+
+  return 0;
+}
diff --git a/asio/src/examples/cpp11/echo/blocking_tcp_echo_client.cpp b/asio/src/examples/cpp11/echo/blocking_tcp_echo_client.cpp
new file mode 100644
index 0000000..fc5b69f
--- /dev/null
+++ b/asio/src/examples/cpp11/echo/blocking_tcp_echo_client.cpp
@@ -0,0 +1,55 @@
+//
+// blocking_tcp_echo_client.cpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2012 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 <cstring>
+#include <iostream>
+#include "asio.hpp"
+
+using asio::ip::tcp;
+
+enum { max_length = 1024 };
+
+int main(int argc, char* argv[])
+{
+  try
+  {
+    if (argc != 3)
+    {
+      std::cerr << "Usage: blocking_tcp_echo_client <host> <port>\n";
+      return 1;
+    }
+
+    asio::io_service io_service;
+
+    tcp::socket s(io_service);
+    tcp::resolver resolver(io_service);
+    asio::connect(s, resolver.resolve({argv[1], argv[2]}));
+
+    std::cout << "Enter message: ";
+    char request[max_length];
+    std::cin.getline(request, max_length);
+    size_t request_length = std::strlen(request);
+    asio::write(s, asio::buffer(request, request_length));
+
+    char reply[max_length];
+    size_t reply_length = asio::read(s,
+        asio::buffer(reply, request_length));
+    std::cout << "Reply is: ";
+    std::cout.write(reply, reply_length);
+    std::cout << "\n";
+  }
+  catch (std::exception& e)
+  {
+    std::cerr << "Exception: " << e.what() << "\n";
+  }
+
+  return 0;
+}
diff --git a/asio/src/examples/cpp11/echo/blocking_tcp_echo_server.cpp b/asio/src/examples/cpp11/echo/blocking_tcp_echo_server.cpp
new file mode 100644
index 0000000..807d04c
--- /dev/null
+++ b/asio/src/examples/cpp11/echo/blocking_tcp_echo_server.cpp
@@ -0,0 +1,76 @@
+//
+// blocking_tcp_echo_server.cpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2012 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 <thread>
+#include <utility>
+#include "asio.hpp"
+
+using asio::ip::tcp;
+
+const int max_length = 1024;
+
+void session(tcp::socket sock)
+{
+  try
+  {
+    for (;;)
+    {
+      char data[max_length];
+
+      asio::error_code error;
+      size_t length = sock.read_some(asio::buffer(data), error);
+      if (error == asio::error::eof)
+        break; // Connection closed cleanly by peer.
+      else if (error)
+        throw asio::system_error(error); // Some other error.
+
+      asio::write(sock, asio::buffer(data, length));
+    }
+  }
+  catch (std::exception& e)
+  {
+    std::cerr << "Exception in thread: " << e.what() << "\n";
+  }
+}
+
+void server(asio::io_service& io_service, unsigned short port)
+{
+  tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port));
+  for (;;)
+  {
+    tcp::socket sock(io_service);
+    a.accept(sock);
+    std::thread(session, std::move(sock)).detach();
+  }
+}
+
+int main(int argc, char* argv[])
+{
+  try
+  {
+    if (argc != 2)
+    {
+      std::cerr << "Usage: blocking_tcp_echo_server <port>\n";
+      return 1;
+    }
+
+    asio::io_service io_service;
+
+    server(io_service, std::atoi(argv[1]));
+  }
+  catch (std::exception& e)
+  {
+    std::cerr << "Exception: " << e.what() << "\n";
+  }
+
+  return 0;
+}
diff --git a/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp b/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp
new file mode 100644
index 0000000..cbe7daa
--- /dev/null
+++ b/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp
@@ -0,0 +1,57 @@
+//
+// blocking_udp_echo_client.cpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2012 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 <cstring>
+#include <iostream>
+#include "asio.hpp"
+
+using asio::ip::udp;
+
+enum { max_length = 1024 };
+
+int main(int argc, char* argv[])
+{
+  try
+  {
+    if (argc != 3)
+    {
+      std::cerr << "Usage: blocking_udp_echo_client <host> <port>\n";
+      return 1;
+    }
+
+    asio::io_service io_service;
+
+    udp::socket s(io_service, udp::endpoint(udp::v4(), 0));
+
+    udp::resolver resolver(io_service);
+    udp::endpoint endpoint = *resolver.resolve({udp::v4(), argv[1], argv[2]});
+
+    std::cout << "Enter message: ";
+    char request[max_length];
+    std::cin.getline(request, max_length);
+    size_t request_length = std::strlen(request);
+    s.send_to(asio::buffer(request, request_length), endpoint);
+
+    char reply[max_length];
+    udp::endpoint sender_endpoint;
+    size_t reply_length = s.receive_from(
+        asio::buffer(reply, max_length), sender_endpoint);
+    std::cout << "Reply is: ";
+    std::cout.write(reply, reply_length);
+    std::cout << "\n";
+  }
+  catch (std::exception& e)
+  {
+    std::cerr << "Exception: " << e.what() << "\n";
+  }
+
+  return 0;
+}
diff --git a/asio/src/examples/cpp11/echo/blocking_udp_echo_server.cpp b/asio/src/examples/cpp11/echo/blocking_udp_echo_server.cpp
new file mode 100644
index 0000000..bdd6ac3
--- /dev/null
+++ b/asio/src/examples/cpp11/echo/blocking_udp_echo_server.cpp
@@ -0,0 +1,52 @@
+//
+// blocking_udp_echo_server.cpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2012 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_service& io_service, unsigned short port)
+{
+  udp::socket sock(io_service, 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_service io_service;
+
+    server(io_service, std::atoi(argv[1]));
+  }
+  catch (std::exception& e)
+  {
+    std::cerr << "Exception: " << e.what() << "\n";
+  }
+
+  return 0;
+}