#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"
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();
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)
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)
{