Handle 0-byte reads and writes correctly.
diff --git a/asio/include/asio/ssl/detail/impl/engine.ipp b/asio/include/asio/ssl/detail/impl/engine.ipp index 1333506..9241e8d 100644 --- a/asio/include/asio/ssl/detail/impl/engine.ipp +++ b/asio/include/asio/ssl/detail/impl/engine.ipp
@@ -125,6 +125,12 @@ engine::want engine::write(const asio::const_buffer& data, asio::error_code& ec, std::size_t& bytes_transferred) { + if (asio::buffer_size(data) == 0) + { + ec = asio::error_code(); + return engine::want_nothing; + } + return perform(&engine::do_write, const_cast<void*>(asio::buffer_cast<const void*>(data)), asio::buffer_size(data), ec, &bytes_transferred); @@ -133,6 +139,12 @@ engine::want engine::read(const asio::mutable_buffer& data, asio::error_code& ec, std::size_t& bytes_transferred) { + if (asio::buffer_size(data) == 0) + { + ec = asio::error_code(); + return engine::want_nothing; + } + return perform(&engine::do_read, asio::buffer_cast<void*>(data), asio::buffer_size(data), ec, &bytes_transferred);