### read_until

The `read_until` function is a composed operation that reads data into a dynamic buffer sequence, or into a streambuf, until it contains a delimiter, matches a regular expression, or a function object indicates a match.

Read data into a dynamic buffer sequence until it contains a specified delimiter.

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v1>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v1 && buffers,
        char delim,
        constraint_t< is_dynamic_buffer_v1< decay_t< DynamicBuffer_v1 > >::value >  = 0,
        constraint_t< !is_dynamic_buffer_v2< decay_t< DynamicBuffer_v1 > >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v1>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v1 && buffers,
        char delim,
        asio::error_code & ec,
        constraint_t< is_dynamic_buffer_v1< decay_t< DynamicBuffer_v1 > >::value >  = 0,
        constraint_t< !is_dynamic_buffer_v2< decay_t< DynamicBuffer_v1 > >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v1>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v1 && buffers,
        string_view delim,
        constraint_t< is_dynamic_buffer_v1< decay_t< DynamicBuffer_v1 > >::value >  = 0,
        constraint_t< !is_dynamic_buffer_v2< decay_t< DynamicBuffer_v1 > >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v1>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v1 && buffers,
        string_view delim,
        asio::error_code & ec,
        constraint_t< is_dynamic_buffer_v1< decay_t< DynamicBuffer_v1 > >::value >  = 0,
        constraint_t< !is_dynamic_buffer_v2< decay_t< DynamicBuffer_v1 > >::value >  = 0);
      » more...

Read data into a dynamic buffer sequence until some part of the data it contains matches a regular expression.

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v1,
        typename Traits>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v1 && buffers,
        const boost::basic_regex< char, Traits > & expr,
        constraint_t< is_dynamic_buffer_v1< decay_t< DynamicBuffer_v1 > >::value >  = 0,
        constraint_t< !is_dynamic_buffer_v2< decay_t< DynamicBuffer_v1 > >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v1,
        typename Traits>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v1 && buffers,
        const boost::basic_regex< char, Traits > & expr,
        asio::error_code & ec,
        constraint_t< is_dynamic_buffer_v1< decay_t< DynamicBuffer_v1 > >::value >  = 0,
        constraint_t< !is_dynamic_buffer_v2< decay_t< DynamicBuffer_v1 > >::value >  = 0);
      » more...

Read data into a dynamic buffer sequence until a function object indicates a match.

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v1,
        typename MatchCondition>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v1 && buffers,
        MatchCondition match_condition,
        constraint_t< is_match_condition< MatchCondition >::value >  = 0,
        constraint_t< is_dynamic_buffer_v1< decay_t< DynamicBuffer_v1 > >::value >  = 0,
        constraint_t< !is_dynamic_buffer_v2< decay_t< DynamicBuffer_v1 > >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v1,
        typename MatchCondition>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v1 && buffers,
        MatchCondition match_condition,
        asio::error_code & ec,
        constraint_t< is_match_condition< MatchCondition >::value >  = 0,
        constraint_t< is_dynamic_buffer_v1< decay_t< DynamicBuffer_v1 > >::value >  = 0,
        constraint_t< !is_dynamic_buffer_v2< decay_t< DynamicBuffer_v1 > >::value >  = 0);
      » more...

Read data into a streambuf until it contains a specified delimiter.

    template<
        typename SyncReadStream,
        typename Allocator>
    std::size_t read_until(
        SyncReadStream & s,
        asio::basic_streambuf< Allocator > & b,
        char delim);
      » more...

    template<
        typename SyncReadStream,
        typename Allocator>
    std::size_t read_until(
        SyncReadStream & s,
        asio::basic_streambuf< Allocator > & b,
        char delim,
        asio::error_code & ec);
      » more...

    template<
        typename SyncReadStream,
        typename Allocator>
    std::size_t read_until(
        SyncReadStream & s,
        asio::basic_streambuf< Allocator > & b,
        string_view delim);
      » more...

    template<
        typename SyncReadStream,
        typename Allocator>
    std::size_t read_until(
        SyncReadStream & s,
        asio::basic_streambuf< Allocator > & b,
        string_view delim,
        asio::error_code & ec);
      » more...

Read data into a streambuf until some part of the data it contains matches a regular expression.

    template<
        typename SyncReadStream,
        typename Allocator,
        typename Traits>
    std::size_t read_until(
        SyncReadStream & s,
        asio::basic_streambuf< Allocator > & b,
        const boost::basic_regex< char, Traits > & expr);
      » more...

    template<
        typename SyncReadStream,
        typename Allocator,
        typename Traits>
    std::size_t read_until(
        SyncReadStream & s,
        asio::basic_streambuf< Allocator > & b,
        const boost::basic_regex< char, Traits > & expr,
        asio::error_code & ec);
      » more...

Read data into a streambuf until a function object indicates a match.

    template<
        typename SyncReadStream,
        typename Allocator,
        typename MatchCondition>
    std::size_t read_until(
        SyncReadStream & s,
        asio::basic_streambuf< Allocator > & b,
        MatchCondition match_condition,
        constraint_t< is_match_condition< MatchCondition >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename Allocator,
        typename MatchCondition>
    std::size_t read_until(
        SyncReadStream & s,
        asio::basic_streambuf< Allocator > & b,
        MatchCondition match_condition,
        asio::error_code & ec,
        constraint_t< is_match_condition< MatchCondition >::value >  = 0);
      » more...

Read data into a dynamic buffer sequence until it contains a specified delimiter.

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v2>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v2 buffers,
        char delim,
        constraint_t< is_dynamic_buffer_v2< DynamicBuffer_v2 >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v2>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v2 buffers,
        char delim,
        asio::error_code & ec,
        constraint_t< is_dynamic_buffer_v2< DynamicBuffer_v2 >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v2>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v2 buffers,
        string_view delim,
        constraint_t< is_dynamic_buffer_v2< DynamicBuffer_v2 >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v2>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v2 buffers,
        string_view delim,
        asio::error_code & ec,
        constraint_t< is_dynamic_buffer_v2< DynamicBuffer_v2 >::value >  = 0);
      » more...

Read data into a dynamic buffer sequence until some part of the data it contains matches a regular expression.

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v2,
        typename Traits>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v2 buffers,
        const boost::basic_regex< char, Traits > & expr,
        constraint_t< is_dynamic_buffer_v2< DynamicBuffer_v2 >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v2,
        typename Traits>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v2 buffers,
        const boost::basic_regex< char, Traits > & expr,
        asio::error_code & ec,
        constraint_t< is_dynamic_buffer_v2< DynamicBuffer_v2 >::value >  = 0);
      » more...

Read data into a dynamic buffer sequence until a function object indicates a match.

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v2,
        typename MatchCondition>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v2 buffers,
        MatchCondition match_condition,
        constraint_t< is_match_condition< MatchCondition >::value >  = 0,
        constraint_t< is_dynamic_buffer_v2< DynamicBuffer_v2 >::value >  = 0);
      » more...

    template<
        typename SyncReadStream,
        typename DynamicBuffer_v2,
        typename MatchCondition>
    std::size_t read_until(
        SyncReadStream & s,
        DynamicBuffer_v2 buffers,
        MatchCondition match_condition,
        asio::error_code & ec,
        constraint_t< is_match_condition< MatchCondition >::value >  = 0,
        constraint_t< is_dynamic_buffer_v2< DynamicBuffer_v2 >::value >  = 0);
      » more...

##### Requirements

Header: `asio/impl/read_until.hpp`

Convenience header: `asio.hpp`