15 : socket_path_(
std::move(socket_path))
30 fd_ = socket(AF_UNIX, SOCK_STREAM, 0);
36 struct sockaddr_un addr;
38 addr.sun_family = AF_UNIX;
41 if (
::connect(
fd_,
reinterpret_cast<struct sockaddr*
>(&addr),
sizeof(addr)) < 0) {
58 auto msg_len =
static_cast<uint32_t
>(
len);
59 ssize_t n =
::send(
fd_, &msg_len,
sizeof(msg_len), 0);
60 if (n < 0 ||
static_cast<size_t>(n) !=
sizeof(msg_len)) {
69 const auto bytes_sent =
static_cast<size_t>(n);
70 return bytes_sent ==
len;
81 ssize_t n = ::recv(
fd_, &msg_len,
sizeof(msg_len), MSG_WAITALL);
82 if (n < 0 ||
static_cast<size_t>(n) !=
sizeof(msg_len)) {
93 if (n < 0 ||
static_cast<size_t>(n) != msg_len) {
void release(size_t message_size) override
Release the previously received message.
bool connect() override
Connect to the server.
bool send(const void *data, size_t len, uint64_t timeout_ns) override
Send a message to the server.
SocketClient(std::string socket_path)
std::span< const uint8_t > receive(uint64_t timeout_ns) override
Receive a message from the server (zero-copy for shared memory)
std::vector< uint8_t > recv_buffer_
void close() override
Close the connection.
const std::vector< MemoryValue > data
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept