3 #include "platform_api.h"
4 #include "sockaddr_private.h"
12 UnixAddr::UnixAddr(const SysAddr &sa):
15 const sockaddr_un &sau = reinterpret_cast<const sockaddr_un &>(sa.addr);
16 if(static_cast<size_t>(sa.size)>sizeof(sa_family_t))
18 abstract = (sau.sun_path[0]==0);
19 path.assign(sau.sun_path+abstract, sa.size-sizeof(sa_family_t)-abstract);
23 UnixAddr::UnixAddr(const string &p, bool a):
27 if(sizeof(sa_family_t)+path.size()+1>sizeof(sockaddr_storage))
28 throw invalid_argument("UnixAddr");
31 SockAddr::SysAddr UnixAddr::to_sys() const
34 sa.size = sizeof(sa_family_t);
36 sa.size += path.size()+1;
38 sockaddr_un &sau = reinterpret_cast<sockaddr_un &>(sa.addr);
39 sau.sun_family = AF_UNIX;
44 std::copy(path.begin(), path.end(), sau.sun_path+abstract);
46 sau.sun_path[path.size()] = 0;