]> git.tdb.fi Git - libs/net.git/blobdiff - source/streamsocket.cpp
Hide platform specific parts of socket addresses
[libs/net.git] / source / streamsocket.cpp
index c6cd214e18dc08dc1620cd190f27287dd8c6ce11..5794ecd82914b16c3c8d22c7edc28a56ffffcbf5 100644 (file)
@@ -6,6 +6,7 @@
 #include <msp/io/handle_private.h>
 #include <msp/io/poll.h>
 #include <msp/strings/format.h>
+#include "sockaddr_private.h"
 #include "socket_private.h"
 #include "streamsocket.h"
 
@@ -75,11 +76,10 @@ int StreamSocket::connect(const SockAddr &addr)
        if(connected)
                throw bad_socket_state("already connected");
 
-       sockaddr_storage sa;
-       socklen_t size = addr.fill_sockaddr(sa);
+       SockAddr::SysAddr sa = addr.to_sys();
 
 #ifdef WIN32
-       int err = WSAConnect(priv->handle, reinterpret_cast<sockaddr *>(&sa), size, 0, 0, 0, 0);
+       int err = WSAConnect(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), sa.size, 0, 0, 0, 0);
        if(err==SOCKET_ERROR)
        {
                int err_code = WSAGetLastError();
@@ -93,7 +93,7 @@ int StreamSocket::connect(const SockAddr &addr)
                        throw system_error("connect", err_code);
        }
 #else
-       int err = ::connect(priv->handle, reinterpret_cast<sockaddr *>(&sa), size);
+       int err = ::connect(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), sa.size);
        if(err==-1)
        {
                if(errno==EINPROGRESS)
@@ -110,9 +110,9 @@ int StreamSocket::connect(const SockAddr &addr)
        peer_addr = addr.copy();
 
        delete local_addr;
-       size = sizeof(sockaddr_storage);
-       getsockname(priv->handle, reinterpret_cast<sockaddr *>(&sa), &size);
-       local_addr = SockAddr::create(sa);
+       SockAddr::SysAddr lsa;
+       getsockname(priv->handle, reinterpret_cast<sockaddr *>(&lsa.addr), &lsa.size);
+       local_addr = SockAddr::from_sys(lsa);
 
        if(err==0)
        {