Простой tcp-клиент, использующий ASIO, вызывает abort () для построения отладки.То же приложение в Release build работает без выдачи ошибки.Компилятор - Visual Studio 2017.
Присоединение отладчика к приложению не предоставляет никакой дополнительной информации.
Демонстрационный пример, который принимает порт в качестве аргумента командной строки, который подключается к серверу и немедленно отключается, показан ниже.
Как можно избежать этой ошибки в отладочной сборке?
#include <memory>
#include <string>
#include <iostream>
#include "asio.hpp"
using asio::ip::tcp;
class Client {
std::unique_ptr<asio::io_service> io_service_ = nullptr;
std::unique_ptr<tcp::socket> sock_ = nullptr;
public:
Client() {
io_service_ = std::make_unique<asio::io_service>();
sock_ = std::make_unique<tcp::socket>(*io_service_);
}
void connect(std::string hostname, unsigned int port) {
auto resolver = tcp::resolver(*io_service_);
auto query = tcp::resolver::query(hostname, std::to_string(port));
auto endpoint_iter = resolver.resolve(query);
asio::connect(*sock_, endpoint_iter);
}
};
int main(int argc, char* argv[]) {
try {
auto port = std::stoi(argv[1]);
Client client;
client.connect("localhost", port);
} catch (std::exception& e) {
std::cout << "\n" << e.what();
}
}