Flush all data from the buffer to the next layer. Returns the number
of bytes written to the next layer on the last write operation. Throws
an exception on failure.
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)