2
3
6
7
22template <
typename Socket >
43 this->m_file_descriptor,
46 static_cast<
long>(
this->m_next_write_offset),
55 this->m_after_sendfile_cb(
56 make_error_code( std::ferror(
this->m_file_descriptor ) ),
57 this->m_transfered_size );
63
64
65
69 const auto desired_size =
70 std::min< file_size_t >(
this->m_remained_size,
this->m_chunk_size );
77 this->m_file_descriptor );
79 if( desired_size != n )
81 this->m_after_sendfile_cb(
82 make_error_code( std::ferror(
this->m_file_descriptor ) ),
83 this->m_transfered_size );
92 asio_ns::const_buffer{
94 static_cast< std::size_t >( desired_size ) },
95 asio_ns::bind_executor(
97 make_async_write_handler() ) );
101 this->m_after_sendfile_cb(
102 make_asio_compaible_error(
103 asio_convertible_error_t::async_write_call_failed ),
104 this->m_transfered_size );
116 return [
this, ctx =
this->shared_from_this() ]
118 (
const asio_ns::error_code & ec, std::size_t written )
noexcept
122 this->m_remained_size -= written;
123 this->m_transfered_size += written;
124 if( 0 ==
this->m_remained_size )
126 this->m_after_sendfile_cb( ec,
this->m_transfered_size );
135 this->m_after_sendfile_cb( ec,
this->m_transfered_size );
std::unique_ptr< char[] > m_buffer
auto make_async_write_handler() noexcept
Helper method for making a lambda for async_write completion handler.
virtual void start() override
sendfile_operation_runner_t & operator=(sendfile_operation_runner_t &&)=delete
sendfile_operation_runner_t(const sendfile_operation_runner_t &)=delete
sendfile_operation_runner_base_t< Socket > base_type_t
sendfile_operation_runner_t & operator=(const sendfile_operation_runner_t &)=delete
void init_next_write() noexcept
sendfile_operation_runner_t(sendfile_operation_runner_t &&)=delete