On Thu, Feb 12, 2009 at 10:16 PM, Igor R
Is transfer_at_least supposed to return success only if requested number of
bytes transferred at once or at all?
http://www.boost.org/doc/libs/1_37_0/doc/html/boost_asio/reference/transfer_... "Return a completion condition function object that indicates that a read or write operation **should continue until** a minimum number of bytes has been transferred, or until an error occurs."
For example, I want to receive 800 bytes and put them into streambuf using transfer_at_least(800) as completion condition, but I receive 2 chunks of 400 bytes, therefore I never get a success, because transfer_at_least_t always wants more data.
When 800 bytes are received (at once or by chunks) or error occurs, the completion handler is invoked - that's the effect of this completion condition. If you encounter different behaviour, could you please provide minimal code demonstrating this?
From implementation: class transfer_at_least_t {
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). public: typedef std::size_t result_type; explicit transfer_at_least_t(std::size_t minimum) : minimum_(minimum) { } template <typename Error> std::size_t operator()(const Error& err, std::size_t bytes_transferred) { return (!!err || bytes_transferred >= minimum_) ? 0 : default_max_transfer_size; } private: std::size_t minimum_; }; This handler called after each read operation and bytes_transferred each time is 400, but minimum_ is 800.
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users