]> git.tdb.fi Git - libs/net.git/blobdiff - source/sockaddr.cpp
Hide platform specific parts of socket addresses
[libs/net.git] / source / sockaddr.cpp
index f6123ca38c685e9b3631593bdd9e89b4de248587..0d14dfd34cb6899b30c60926b272c9cc85b36aa5 100644 (file)
@@ -1,28 +1,30 @@
 #include <stdexcept>
 #include "inet.h"
 #include "inet6.h"
+#include "sockaddr_private.h"
 
 using namespace std;
 
 namespace Msp {
 namespace Net {
 
-SockAddr *SockAddr::create(const sockaddr_storage &sa)
+SockAddr *SockAddr::from_sys(const SysAddr &sa)
 {
-       switch(sa.ss_family)
+       switch(sa.addr.ss_family)
        {
        case AF_INET:
-               return new InetAddr(reinterpret_cast<const sockaddr_in &>(sa));
+               return new InetAddr(sa);
        case AF_INET6:
-               return new Inet6Addr(reinterpret_cast<const sockaddr_in6 &>(sa));
+               return new Inet6Addr(sa);
        default:
                throw invalid_argument("SockAddr::create");
        }
 }
 
-unsigned SockAddr::fill_sockaddr(sockaddr_storage &sa) const
+SockAddr::SysAddr::SysAddr():
+       size(sizeof(sockaddr_storage))
 {
-       return fill_sockaddr(reinterpret_cast<sockaddr &>(sa));
+       addr.ss_family = AF_UNSPEC;
 }
 
 } // namespace Net