Beispiel #1
0
void
tcp_client::async_read(void) {
  m_io_service.async_read(m_fd, m_read_buffer, READ_SIZE,
    [&](std::size_t length) {
      if (m_receive_handler)
        if (not m_receive_handler(*this, { m_read_buffer.begin(), m_read_buffer.begin() + length })) {
          disconnect();
          return ;
        }

      //! clear read buffer keep waiting for incoming bytes
      m_read_buffer.clear();

      if (m_is_connected)
        async_read();
    });
}
Beispiel #2
0
void
tcp_client::async_read(void) {
    boost::asio::async_read(m_socket, boost::asio::buffer(m_read_buffer.data(), READ_SIZE),
        [](const boost::system::error_code& error, std::size_t bytes) -> std::size_t {
            //! break if bytes have been received, continue otherwise
            return error or bytes ? 0 : READ_SIZE;
        },
        [=](boost::system::error_code error, std::size_t length) {
            if (error) {
                process_disconnection();
                return ;
            }

            std::lock_guard<std::mutex> lock(m_receive_handler_mutex);
            if (m_receive_handler)
                if (not m_receive_handler(*this, { m_read_buffer.begin(), m_read_buffer.begin() + length })) {
                    process_disconnection();
                    return ;
                }

            //! keep waiting for incoming bytes
            async_read();
        });
}