]> git.tdb.fi Git - libs/net.git/blobdiff - source/socket.cpp
Hide platform specific parts of socket addresses
[libs/net.git] / source / socket.cpp
index 8fa910cbd5a97eb52479a0e18192f18a6425633b..0e2950930f0e653d7348bcff826d3b0d53fcb57c 100644 (file)
@@ -9,6 +9,7 @@
 #include <msp/strings/format.h>
 #include <msp/time/rawtime_private.h>
 #include <msp/time/units.h>
+#include "sockaddr_private.h"
 #include "socket.h"
 #include "socket_private.h"
 
@@ -48,10 +49,9 @@ Socket::Socket(const Private &p, const SockAddr &paddr):
 {
        priv->handle = p.handle;
 
-       sockaddr_storage sa;
-       socklen_t size = sizeof(sockaddr_storage);
-       getsockname(priv->handle, reinterpret_cast<sockaddr *>(&sa), &size);
-       local_addr = SockAddr::create(sa);
+       SockAddr::SysAddr sa;
+       getsockname(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), &sa.size);
+       local_addr = SockAddr::from_sys(sa);
 
 #ifdef WIN32
        *priv->event = CreateEvent(0, false, false, 0);
@@ -113,10 +113,9 @@ const IO::Handle &Socket::get_event_handle()
 
 void Socket::bind(const SockAddr &addr)
 {
-       sockaddr_storage sa;
-       unsigned size = addr.fill_sockaddr(sa);
+       SockAddr::SysAddr sa = addr.to_sys();
 
-       int err = ::bind(priv->handle, reinterpret_cast<sockaddr *>(&sa), size);
+       int err = ::bind(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), sa.size);
        if(err==-1)
                throw system_error("bind");