@MasterCopipaster

Почему в переменную может попадать мусор?

У меня есть небольшая DLL ка на C++11, она цепляется к WS серверу и ждет данные после чего закрывает соединение.
При первом запуске все работает отлично. API ключ приходит как положено, но при второй интерации в API ключь попадает содержимое массива error я не как не могу понять почему такое происходит, может кто ни будь подсказать в чем может быть причина?

#include "stdafx.h"
#include "Project2.h"
#include "Header1.h"
//#include <eh.h>

#include <boost/beast/core.hpp>
#include <boost/beast/websocket.hpp>
#include <boost/asio/connect.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <cstdlib>
#include <iostream>
#include <string>
#include <cstring>

namespace beast = boost::beast;         // from <boost/beast.hpp>
namespace http = beast::http;           // from <boost/beast/http.hpp>
namespace websocket = beast::websocket; // from <boost/beast/websocket.hpp>
namespace net = boost::asio;            // from <boost/asio.hpp>
using tcp = boost::asio::ip::tcp;       // from <boost/asio/ip/tcp.hpp>

auto decorator_with_key(boost::beast::string_view& key) {
    return [key](websocket::request_type& req) {
        req.set("Api-Key", key);
    };
}

PROJECT2_API bool readSignal(char* buf, char* key_input, char* error) {
    try
    {
        boost::beast::string_view key = std::string(key_input);
        std::string host = "example.com";
        auto const  port = "3001";
        beast::flat_buffer buffer;
        net::io_context ioc;
        tcp::resolver resolver{ ioc };
        websocket::stream<tcp::socket> ws{ ioc };
        auto const results = resolver.resolve(host, port);
        auto ep = net::connect(ws.next_layer(), results);
        host += ':' + std::to_string(ep.port());
        ws.set_option(websocket::stream_base::decorator(decorator_with_key(key)));
        ws.handshake(host, "/");
        ws.read(buffer);
        ws.close(websocket::close_code::normal);
        std::string read_buffer = beast::buffers_to_string(buffer.data());
        strcpy_s(buf, 255, read_buffer.c_str());
        return true;
    }
    catch (std::exception const& e)
    {
        strcpy_s(error, 255, e.what());
        return false;
    }
    return false;
}
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы