From 5cded59aef09ecad370818dbdf87cd95cbe1a91f Mon Sep 17 00:00:00 2001 From: Christopher Kohlhoff Date: Sat, 9 Dec 2006 22:31:44 +0000 Subject: [PATCH] Replace win_iocp_io_service::register_socket() with register_handle() to allow it to be used with other Windows kernel objects. [SVN r36311] --- include/boost/asio/detail/win_iocp_io_service.hpp | 7 +++---- .../boost/asio/detail/win_iocp_socket_service.hpp | 14 ++++++++++---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/include/boost/asio/detail/win_iocp_io_service.hpp b/include/boost/asio/detail/win_iocp_io_service.hpp index 1d971d54..1102696b 100644 --- a/include/boost/asio/detail/win_iocp_io_service.hpp +++ b/include/boost/asio/detail/win_iocp_io_service.hpp @@ -94,11 +94,10 @@ public: } } - // Register a socket with the IO completion port. - void register_socket(socket_type sock) + // Register a handle with the IO completion port. + void register_handle(HANDLE handle) { - HANDLE sock_as_handle = reinterpret_cast(sock); - ::CreateIoCompletionPort(sock_as_handle, iocp_.handle, 0, 0); + ::CreateIoCompletionPort(handle, iocp_.handle, 0, 0); } // Run the event loop until interrupted or no more work. diff --git a/include/boost/asio/detail/win_iocp_socket_service.hpp b/include/boost/asio/detail/win_iocp_socket_service.hpp index ea204d0a..bd4c880b 100644 --- a/include/boost/asio/detail/win_iocp_socket_service.hpp +++ b/include/boost/asio/detail/win_iocp_socket_service.hpp @@ -92,6 +92,11 @@ public: return socket_; } + HANDLE as_handle() const + { + return reinterpret_cast(socket_); + } + bool have_remote_endpoint() const { return have_remote_endpoint_; @@ -262,7 +267,8 @@ public: if (sock.get() == invalid_socket) return ec; - iocp_service_.register_socket(sock.get()); + HANDLE sock_as_handle = reinterpret_cast(sock.get()); + iocp_service_.register_handle(sock_as_handle); impl.socket_ = sock.release(); impl.cancel_token_.reset(static_cast(0), noop_deleter()); @@ -279,7 +285,7 @@ public: boost::system::error_code ignored_ec; close(impl, ignored_ec); - iocp_service_.register_socket(native_socket); + iocp_service_.register_handle(native_socket.as_handle()); impl.socket_ = native_socket; impl.cancel_token_.reset(static_cast(0), noop_deleter()); @@ -1862,7 +1868,7 @@ public: impl.socket_ = socket_ops::socket(family, type, proto, ec); if (impl.socket_ == invalid_socket) return ec; - iocp_service_.register_socket(impl.socket_); + iocp_service_.register_handle(impl.socket_.as_handle()); } // Perform the connect operation. @@ -1987,7 +1993,7 @@ public: io_service().post(bind_handler(handler, ec)); return; } - iocp_service_.register_socket(impl.socket_); + iocp_service_.register_handle(impl.socket_.as_handle()); } // Mark the socket as non-blocking so that the connection will take place