1 #include "platform_api.h"
5 #include "sockaddr_private.h"
12 UnixAddr::UnixAddr(const SysAddr &sa)
14 const sockaddr_un &sau = reinterpret_cast<const sockaddr_un &>(sa.addr);
15 if(static_cast<size_t>(sa.size)>sizeof(sa_family_t))
17 abstract = (sau.sun_path[0]==0);
18 path.assign(sau.sun_path+abstract, sa.size-sizeof(sa_family_t)-abstract);
22 UnixAddr::UnixAddr(const string &p, bool a):
26 if(sizeof(sa_family_t)+path.size()+1>sizeof(sockaddr_storage))
27 throw invalid_argument("UnixAddr::UnixAddr");
30 SockAddr::SysAddr UnixAddr::to_sys() const
33 sa.size = sizeof(sa_family_t);
35 sa.size += path.size()+1;
37 sockaddr_un &sau = reinterpret_cast<sockaddr_un &>(sa.addr);
38 sau.sun_family = AF_UNIX;
43 std::copy(path.begin(), path.end(), sau.sun_path+abstract);
45 sau.sun_path[path.size()] = 0;