| Home | Libraries | People | FAQ | More

###### websocket::stream::read (2 of 2 overloads)

Read a message.

Synopsis

    template<
        class DynamicBuffer>
    std::size_t
    read(
        DynamicBuffer& buffer,
        error_code& ec);

Description

This function is used to synchronously read a complete message from the stream. The call blocks until one of the following is true:

- A complete message is received.
- A close frame is received. In this case the error indicated by the function will be `websocket::closed`.
- An error occurs on the stream.

This operation is implemented in terms of one or more calls to the next layer's `read_some` and `write_some` functions.

Received message data, if any, is appended to the input area of the buffer. The functions `websocket::stream::got_binary` and `websocket::stream::got_text` may be used to query the stream and determine the type of the last received message.

While this operation is active, the implementation will read incoming control frames and handle them automatically as follows:

- The `websocket::stream::control_callback` will be invoked for each control frame.
- For each received ping frame, a pong frame will be automatically sent.
- If a close frame is received, the WebSocket close procedure is performed. In this case, when the function returns, the error `websocket::closed` will be indicated.

Return Value

The number of message payload bytes appended to the buffer.

Parameters

Name | Description
--- | ---
`buffer` | A dynamic buffer to hold the message data after any masking or decompression has been applied.
`ec` | Set to indicate what error occurred, if any.