#include "sock_client.h" client::client(boost::asio::io_context & io_context, const std::string & unix_file, std::function&)> func_cb) : socket_(io_context) , callback_func(func_cb) { socket_.async_connect(seq_packet::seqpacket_protocol::endpoint(unix_file), std::bind(&client::handle_connect, this, std::placeholders::_1)); } client::~client() { do_close(); } void client::write(const std::vector & data) { boost::asio::write(socket_, boost::asio::buffer(data)); } void client::do_close() { socket_.close(); } void client::start() { seq_packet::seqpacket_protocol::socket::message_flags in_flags { MSG_WAITALL }; socket_.async_receive(boost::asio::buffer(data_), in_flags, std::bind(&client::handle_read, this, std::placeholders::_1, std::placeholders::_2)); } void client::handle_connect(const boost::system::error_code & error) { if (!error) start(); } void client::handle_read(const boost::system::error_code & error, size_t bytes_transferred) { if (!error && callback_func && bytes_transferred) { callback_func(std::vector(std::begin(data_), std::begin(data_) + bytes_transferred)); start(); } //else // do_close(); }