У меня есть небольшая 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;
}