]> git.stg.codes - stg.git/blob - stglibs/sgcp.lib/unix.cpp
15002e5ef2361f79ff0d914b96ce9573c26ee79f
[stg.git] / stglibs / sgcp.lib / unix.cpp
1 #include "unix.h"
2
3 #include <cerrno>
4 #include <cstring>
5
6 #include <sys/types.h>
7 #include <sys/socket.h>
8 #include <sys/un.h>
9
10 using STG::SGCP::UnixProto;
11
12 UnixProto::UnixProto()
13     : m_sock(socket(AF_UNIX, SOCK_STREAM, 0))
14 {
15 }
16
17 UnixProto::~UnixProto()
18 {
19     close(m_sock);
20 }
21
22 void UnixProto::connect(const std::string& address, uint16_t /*port*/)
23 {
24     sockaddr_un addr;
25     addr.sun_family = AF_UNIX;
26     size_t max = sizeof(addr.sun_path);
27     strncpy(addr.sun_path, address.c_str(), max - 1);
28     addr.sun_path[max - 1] = 0; // Just in case.
29     if (::connect(m_sock, reinterpret_cast<const sockaddr*>(&addr), sizeof(addr)) < 0)
30         throw Error(strerror(errno));
31 }
32
33 ssize_t UnixProto::write(const void* buf, size_t size)
34 {
35     return ::write(m_sock, buf, size);
36 }
37
38 ssize_t UnixProto::read(void* buf, size_t size)
39 {
40     return ::read(m_sock, buf, size);
41 }