Websocket Binance API with Boost::Beast C++

Viewed 56

everyone! I'm trying to use Binance websocket API from https://binance-docs.github.io/apidocs/spot/en/#websocket-market-streams I want to make it via boost::beast c++ My approach made from docs https://www.boost.org/doc/libs/1_70_0/libs/beast/example/websocket/client/sync-ssl/websocket_client_sync_ssl.cpp

#include <boost/beast/core.hpp>
#include <boost/beast/websocket.hpp>
#include <boost/beast/ssl.hpp>
#include <boost/beast/websocket/ssl.hpp>
#include <boost/asio/connect.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/beast/core/stream_traits.hpp>
#include <boost/asio/ssl.hpp>
#include <boost/asio/buffers_iterator.hpp>


#include <iostream>
#include <string>


namespace beast = boost::beast;
namespace http = beast::http;
namespace websocket = beast::websocket;
namespace net = boost::asio;
namespace ssl = boost::asio::ssl;
using tcp = boost::asio::ip::tcp; 


int main() {

  const std::string host = "stream.binance.com";
  const std::string port = "9443";

  try {
    boost::asio::io_context io_ctx;
    ssl::context ssl_ctx{ssl::context::tlsv12_client};
    tcp::resolver resolver(io_ctx);
    websocket::stream<beast::ssl_stream<tcp::socket> > ws(io_ctx, ssl_ctx);

    auto const results = resolver.resolve(host, port);

    net::connect(ws.next_layer().next_layer(), results.begin(), results.end());

    ws.next_layer().handshake(ssl::stream_base::client);
    

    ws.set_option(websocket::stream_base::decorator(
              [](websocket::request_type& req)
              {

                  req.set(http::field::user_agent,
                      std::string(BOOST_BEAST_VERSION_STRING) +
                          " websocket-client-coro");
              }));

    ws.handshake(host, "/ws/btcusdt@miniTicker/ethusdt@miniTicker");
    
    beast::flat_buffer buffer;

    auto const rpcJson = R"({"method":"UNSUBSCRIBE", "params": ["btcusdt@miniTicker", "ethusdt@miniTicker"], "id":1})";
    ws.write(net::buffer(std::string(rpcJson)));

    ws.close(websocket::close_code::normal); // HERE stream truncated

    std::cout << "Everything finished fine" << std::endl;
  }
  catch(std::exception const& e) {
    std::cerr << "Error: " << e.what() << std::endl;
    return EXIT_FAILURE;
  }

  return EXIT_SUCCESS;
}

I got system error - stream truncated, from line

ws.close(websocket::close_code::normal); // HERE stream truncated

Could somebody help me?

0 Answers
Related