Fix up some I/O objects to use non-deprecated get_executor().
diff --git a/asio/include/asio/buffered_read_stream.hpp b/asio/include/asio/buffered_read_stream.hpp
index f58e4eb..daa6f59 100644
--- a/asio/include/asio/buffered_read_stream.hpp
+++ b/asio/include/asio/buffered_read_stream.hpp
@@ -55,6 +55,9 @@
   /// The type of the lowest layer.
   typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
 
+  /// The type of the executor associated with the object.
+  typedef typename lowest_layer_type::executor_type executor_type;
+
 #if defined(GENERATING_DOCUMENTATION)
   /// The default buffer size.
   static const std::size_t default_buffer_size = implementation_defined;
@@ -96,14 +99,21 @@
     return next_layer_.lowest_layer();
   }
 
-  /// Get the io_context associated with the object.
+  /// Get the executor associated with the object.
+  executor_type get_executor() ASIO_NOEXCEPT
+  {
+    return next_layer_.lowest_layer().get_executor();
+  }
+
+#if !defined(ASIO_NO_DEPRECATED)
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
+  /// object.
   asio::io_context& get_io_context()
   {
     return next_layer_.get_io_context();
   }
 
-#if !defined(ASIO_NO_DEPRECATED)
-  /// (Deprecated: Use get_io_context().) Get the io_context associated with the
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
   /// object.
   asio::io_context& get_io_service()
   {
diff --git a/asio/include/asio/buffered_stream.hpp b/asio/include/asio/buffered_stream.hpp
index 0e84013..516e213 100644
--- a/asio/include/asio/buffered_stream.hpp
+++ b/asio/include/asio/buffered_stream.hpp
@@ -52,6 +52,9 @@
   /// The type of the lowest layer.
   typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
 
+  /// The type of the executor associated with the object.
+  typedef typename lowest_layer_type::executor_type executor_type;
+
   /// Construct, passing the specified argument to initialise the next layer.
   template <typename Arg>
   explicit buffered_stream(Arg& a)
@@ -87,14 +90,21 @@
     return stream_impl_.lowest_layer();
   }
 
-  /// Get the io_context associated with the object.
+  /// Get the executor associated with the object.
+  executor_type get_executor() ASIO_NOEXCEPT
+  {
+    return stream_impl_.lowest_layer().get_executor();
+  }
+
+#if !defined(ASIO_NO_DEPRECATED)
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
+  /// object.
   asio::io_context& get_io_context()
   {
     return stream_impl_.get_io_context();
   }
 
-#if !defined(ASIO_NO_DEPRECATED)
-  /// (Deprecated: Use get_io_context().) Get the io_context associated with the
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
   /// object.
   asio::io_context& get_io_service()
   {
diff --git a/asio/include/asio/buffered_write_stream.hpp b/asio/include/asio/buffered_write_stream.hpp
index 0b5ef89..0fa7547 100644
--- a/asio/include/asio/buffered_write_stream.hpp
+++ b/asio/include/asio/buffered_write_stream.hpp
@@ -55,6 +55,9 @@
   /// The type of the lowest layer.
   typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
 
+  /// The type of the executor associated with the object.
+  typedef typename lowest_layer_type::executor_type executor_type;
+
 #if defined(GENERATING_DOCUMENTATION)
   /// The default buffer size.
   static const std::size_t default_buffer_size = implementation_defined;
@@ -96,14 +99,21 @@
     return next_layer_.lowest_layer();
   }
 
-  /// Get the io_context associated with the object.
+  /// Get the executor associated with the object.
+  executor_type get_executor() ASIO_NOEXCEPT
+  {
+    return next_layer_.lowest_layer().get_executor();
+  }
+
+#if !defined(ASIO_NO_DEPRECATED)
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
+  /// object.
   asio::io_context& get_io_context()
   {
     return next_layer_.get_io_context();
   }
 
-#if !defined(ASIO_NO_DEPRECATED)
-  /// (Deprecated: Use get_io_context().) Get the io_context associated with the
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
   /// object.
   asio::io_context& get_io_service()
   {
diff --git a/asio/include/asio/ssl/stream.hpp b/asio/include/asio/ssl/stream.hpp
index 207bba3..015066b 100644
--- a/asio/include/asio/ssl/stream.hpp
+++ b/asio/include/asio/ssl/stream.hpp
@@ -80,6 +80,9 @@
   /// The type of the lowest layer.
   typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
 
+  /// The type of the executor associated with the object.
+  typedef typename lowest_layer_type::executor_type executor_type;
+
 #if defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
   /// Construct a stream.
   /**
@@ -112,19 +115,34 @@
   {
   }
 
-  /// Get the io_context associated with the object.
+  /// Get the executor associated with the object.
   /**
-   * This function may be used to obtain the io_context object that the stream
+   * This function may be used to obtain the executor object that the stream
    * uses to dispatch handlers for asynchronous operations.
    *
-   * @return A reference to the io_context object that stream will use to
-   * dispatch handlers. Ownership is not transferred to the caller.
+   * @return A copy of the executor that stream will use to dispatch handlers.
    */
+  executor_type get_executor() ASIO_NOEXCEPT
+  {
+    return next_layer_.lowest_layer().get_executor();
+  }
+
+#if !defined(ASIO_NO_DEPRECATED)
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
+  /// object.
   asio::io_context& get_io_context()
   {
     return next_layer_.lowest_layer().get_io_context();
   }
 
+  /// (Deprecated: Use get_executor().) Get the io_context associated with the
+  /// object.
+  asio::io_context& get_io_service()
+  {
+    return next_layer_.lowest_layer().get_io_service();
+  }
+#endif // !defined(ASIO_NO_DEPRECATED)
+
   /// Get the underlying implementation in the native type.
   /**
    * This function may be used to obtain the underlying implementation of the
diff --git a/asio/src/examples/cpp03/windows/transmit_file.cpp b/asio/src/examples/cpp03/windows/transmit_file.cpp
index 9ea2853..24502a0 100644
--- a/asio/src/examples/cpp03/windows/transmit_file.cpp
+++ b/asio/src/examples/cpp03/windows/transmit_file.cpp
@@ -28,7 +28,7 @@
     random_access_handle& file, Handler handler)
 {
   // Construct an OVERLAPPED-derived object to contain the handler.
-  overlapped_ptr overlapped(socket.get_io_context(), handler);
+  overlapped_ptr overlapped(socket.get_executor().context(), handler);
 
   // Initiate the TransmitFile operation.
   BOOL ok = ::TransmitFile(socket.native_handle(),
@@ -119,7 +119,7 @@
   void start_accept()
   {
     connection::pointer new_connection =
-      connection::create(acceptor_.get_io_context(), filename_);
+      connection::create(acceptor_.get_executor().context(), filename_);
 
     acceptor_.async_accept(new_connection->socket(),
         boost::bind(&server::handle_accept, this, new_connection,
diff --git a/asio/src/tests/unit/buffered_read_stream.cpp b/asio/src/tests/unit/buffered_read_stream.cpp
index 06047c2..b4cb4fd 100644
--- a/asio/src/tests/unit/buffered_read_stream.cpp
+++ b/asio/src/tests/unit/buffered_read_stream.cpp
@@ -78,9 +78,17 @@
     stream_type stream1(ioc);
     stream_type stream2(ioc, 1024);
 
+    stream_type::executor_type ex = stream1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = stream1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = stream1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     stream_type::lowest_layer_type& lowest_layer = stream1.lowest_layer();
     (void)lowest_layer;
 
diff --git a/asio/src/tests/unit/buffered_stream.cpp b/asio/src/tests/unit/buffered_stream.cpp
index a55a2a5..3d5f479 100644
--- a/asio/src/tests/unit/buffered_stream.cpp
+++ b/asio/src/tests/unit/buffered_stream.cpp
@@ -82,9 +82,17 @@
     stream_type stream1(ioc);
     stream_type stream2(ioc, 1024, 1024);
 
+    stream_type::executor_type ex = stream1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = stream1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = stream1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     stream_type::lowest_layer_type& lowest_layer = stream1.lowest_layer();
     (void)lowest_layer;
 
diff --git a/asio/src/tests/unit/buffered_write_stream.cpp b/asio/src/tests/unit/buffered_write_stream.cpp
index cf3a819..a9731e0 100644
--- a/asio/src/tests/unit/buffered_write_stream.cpp
+++ b/asio/src/tests/unit/buffered_write_stream.cpp
@@ -78,9 +78,17 @@
     stream_type stream1(ioc);
     stream_type stream2(ioc, 1024);
 
+    stream_type::executor_type ex = stream1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = stream1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = stream1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     stream_type::lowest_layer_type& lowest_layer = stream1.lowest_layer();
     (void)lowest_layer;
 
diff --git a/asio/src/tests/unit/generic/datagram_protocol.cpp b/asio/src/tests/unit/generic/datagram_protocol.cpp
index 58da16a..bb2c39b 100644
--- a/asio/src/tests/unit/generic/datagram_protocol.cpp
+++ b/asio/src/tests/unit/generic/datagram_protocol.cpp
@@ -94,9 +94,17 @@
 
     // basic_io_object functions.
 
+    dp::socket::executor_type ex = socket1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = socket1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = socket1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_socket functions.
 
     dp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
diff --git a/asio/src/tests/unit/generic/raw_protocol.cpp b/asio/src/tests/unit/generic/raw_protocol.cpp
index 0ba8c11..b3d72f0 100644
--- a/asio/src/tests/unit/generic/raw_protocol.cpp
+++ b/asio/src/tests/unit/generic/raw_protocol.cpp
@@ -94,9 +94,17 @@
 
     // basic_io_object functions.
 
+    rp::socket::executor_type ex = socket1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = socket1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = socket1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_socket functions.
 
     rp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
diff --git a/asio/src/tests/unit/generic/seq_packet_protocol.cpp b/asio/src/tests/unit/generic/seq_packet_protocol.cpp
index a2ba7be..da19165 100644
--- a/asio/src/tests/unit/generic/seq_packet_protocol.cpp
+++ b/asio/src/tests/unit/generic/seq_packet_protocol.cpp
@@ -90,9 +90,17 @@
 
     // basic_io_object functions.
 
+    spp::socket::executor_type ex = socket1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = socket1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = socket1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_socket functions.
 
     spp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
diff --git a/asio/src/tests/unit/generic/stream_protocol.cpp b/asio/src/tests/unit/generic/stream_protocol.cpp
index 4a93f26..16711c5 100644
--- a/asio/src/tests/unit/generic/stream_protocol.cpp
+++ b/asio/src/tests/unit/generic/stream_protocol.cpp
@@ -104,9 +104,17 @@
 
     // basic_io_object functions.
 
+    sp::socket::executor_type ex = socket1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = socket1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = socket1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_socket functions.
 
     sp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
diff --git a/asio/src/tests/unit/is_read_buffered.cpp b/asio/src/tests/unit/is_read_buffered.cpp
index ee23478..f4ca5c9 100644
--- a/asio/src/tests/unit/is_read_buffered.cpp
+++ b/asio/src/tests/unit/is_read_buffered.cpp
@@ -31,6 +31,8 @@
 
   typedef test_stream lowest_layer_type;
 
+  typedef io_context_type::executor_type executor_type;
+
   test_stream(asio::io_context& io_context)
     : io_context_(io_context)
   {
diff --git a/asio/src/tests/unit/is_write_buffered.cpp b/asio/src/tests/unit/is_write_buffered.cpp
index 3b26c27..206a8a5 100644
--- a/asio/src/tests/unit/is_write_buffered.cpp
+++ b/asio/src/tests/unit/is_write_buffered.cpp
@@ -31,6 +31,8 @@
 
   typedef test_stream lowest_layer_type;
 
+  typedef io_context_type::executor_type executor_type;
+
   test_stream(asio::io_context& io_context)
     : io_context_(io_context)
   {
diff --git a/asio/src/tests/unit/serial_port.cpp b/asio/src/tests/unit/serial_port.cpp
index 6171afc..0a7f041 100644
--- a/asio/src/tests/unit/serial_port.cpp
+++ b/asio/src/tests/unit/serial_port.cpp
@@ -86,9 +86,17 @@
 
     // basic_io_object functions.
 
+    serial_port::executor_type ex = port1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = port1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = port1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_serial_port functions.
 
     serial_port::lowest_layer_type& lowest_layer = port1.lowest_layer();
diff --git a/asio/src/tests/unit/signal_set.cpp b/asio/src/tests/unit/signal_set.cpp
index c0356d2..88b983a 100644
--- a/asio/src/tests/unit/signal_set.cpp
+++ b/asio/src/tests/unit/signal_set.cpp
@@ -52,9 +52,17 @@
 
     // basic_io_object functions.
 
+    signal_set::executor_type ex = set1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = set1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = set1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // basic_signal_set functions.
 
     set1.add(1);
diff --git a/asio/src/tests/unit/ssl/stream.cpp b/asio/src/tests/unit/ssl/stream.cpp
index 2020283..bac2c23 100644
--- a/asio/src/tests/unit/ssl/stream.cpp
+++ b/asio/src/tests/unit/ssl/stream.cpp
@@ -77,9 +77,17 @@
 
     // basic_io_object functions.
 
+    ssl::stream<ip::tcp::socket>::executor_type ex = stream1.get_executor();
+    (void)ex;
+
+#if !defined(ASIO_NO_DEPRECATED)
     io_context& ioc_ref = stream1.get_io_context();
     (void)ioc_ref;
 
+    io_context& ioc_ref2 = stream1.get_io_service();
+    (void)ioc_ref2;
+#endif // !defined(ASIO_NO_DEPRECATED)
+
     // ssl::stream functions.
 
     SSL* ssl1 = stream1.native_handle();