|
Boost Users : |
Subject: Re: [Boost-users] asio::transfer_at_least strange behavior
From: Igor R (boost.lists_at_[hidden])
Date: 2009-02-12 16:22:58
>
> Yes, exactly. Code snippet may be uselese, but I'm using something like
> this:
> boost::asio::read(sock, buf, boost::asio::transfer_at_least(800),
> myhandler);
>
> and myhandler is never called (because no more data arrives).
>
So, probably 800 bytes do not arrive, or there's some other issue.
> This handler called after each read operation and bytes_transferred each
> time is 400, but minimum_ is 800.
>
>>
Look at the implementation of read():
(Note that bytes_transferred passed to the completion_condition is
accumulated each time)
template <typename SyncReadStream, typename MutableBufferSequence,
typename CompletionCondition>
std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers,
CompletionCondition completion_condition, boost::system::error_code& ec)
{
ec = boost::system::error_code();
boost::asio::detail::consuming_buffers<
mutable_buffer, MutableBufferSequence> tmp(buffers);
std::size_t total_transferred = 0;
tmp.set_max_size(detail::adapt_completion_condition_result(
completion_condition(ec, total_transferred)));
while (tmp.begin() != tmp.end())
{
std::size_t bytes_transferred = s.read_some(tmp, ec);
tmp.consume(bytes_transferred);
* total_transferred += bytes_transferred;*
tmp.set_max_size(detail::adapt_completion_condition_result(
completion_condition(ec, total_transferred)));
}
return total_transferred;
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net