13 #include <sys/types.h> 14 #include <sys/socket.h> 46 std::swap(
is_eof, other.is_eof);
47 std::swap(
read_fd, other.read_fd);
54 int new_fd = socket(AF_UNIX, SOCK_STREAM, 0);
58 struct sockaddr_un server_addr;
59 memset((
void *) &server_addr, 0,
sizeof(server_addr));
61 server_addr.sun_family = AF_UNIX;
62 strcpy(server_addr.sun_path, server_path);
63 if (connect(new_fd, (sockaddr *) &server_addr,
sizeof(server_addr)) == -1) {
78 if (res < 0 || (
size_t) res != len) {
90 size_t remaining = len;
91 size_t bytes_read = 0;
92 while (remaining > 0) {
106 if (bytes_read != len)
117 size_t len =
string.size();
118 if (len > (
size_t) (1<<31))
121 stream.
write(
string.data(), len);
125 auto len = stream.
read<
size_t>();
129 if (len > (
size_t) (1<<31))
132 std::unique_ptr<char[]> buffer(
new char[len] );
133 stream.
read(buffer.get(), len);
135 std::string string(buffer.get(), len);
140 template <
typename T>
142 size_t size = vec.size();
143 if (size > (
size_t) (1<<31))
146 for (
size_t i=0;i<size;i++)
147 stream.
write(vec[i]);
149 template <
typename T>
152 auto size = stream.
read<
size_t>();
153 if (size > (
size_t) (1<<31))
156 for (
size_t i=0;i<size;i++)
157 vec.push_back(stream.
read<T>());
void write(const char *buffer, size_t len)
BinaryStream(int read_fd, int write_fd)
BinaryStream & operator=(const BinaryStream &)=delete
static BinaryStream connectToUnixSocket(const char *)
size_t read(char *buffer, size_t len)