]> git.tdb.fi Git - libs/net.git/blobdiff - source/streamsocket.cpp
Add an overload for resolve that takes host and service separately
[libs/net.git] / source / streamsocket.cpp
index 9147ad88861f02cfb4f01502b8df40fde3633698..8a262454eca173dfcc6ef93f0fcd0d45c10582f7 100644 (file)
@@ -33,8 +33,8 @@ bool StreamSocket::connect(const SockAddr &addr)
 
        SockAddr::SysAddr sa = addr.to_sys();
 
+       int err = ::connect(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), sa.size);
 #ifdef WIN32
-       int err = WSAConnect(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), sa.size, 0, 0, 0, 0);
        if(err==SOCKET_ERROR)
        {
                int err_code = WSAGetLastError();
@@ -48,7 +48,6 @@ bool StreamSocket::connect(const SockAddr &addr)
                        throw system_error("connect", err_code);
        }
 #else
-       int err = ::connect(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), sa.size);
        if(err==-1)
        {
                if(errno==EINPROGRESS)
@@ -67,7 +66,7 @@ bool StreamSocket::connect(const SockAddr &addr)
        delete local_addr;
        SockAddr::SysAddr lsa;
        getsockname(priv->handle, reinterpret_cast<sockaddr *>(&lsa.addr), &lsa.size);
-       local_addr = SockAddr::from_sys(lsa);
+       local_addr = SockAddr::new_from_sys(lsa);
 
        if(err==0)
        {
@@ -82,7 +81,7 @@ bool StreamSocket::connect(const SockAddr &addr)
 bool StreamSocket::poll_connect(const Time::TimeDelta &timeout)
 {
        if(!connecting)
-               throw bad_socket_state("not connecting");
+               return false;
 
        IO::PollEvent res = poll(*this, IO::P_OUTPUT, timeout);
        if(res&IO::P_OUTPUT)
@@ -124,7 +123,13 @@ void StreamSocket::on_event(IO::PollEvent ev)
 
                connecting = false;
                connected = (err==0);
-               signal_connect_finished.emit(err);
+               if(err)
+               {
+                       system_error exc("connect", err);
+                       signal_connect_finished.emit(&exc);
+               }
+               else
+                       signal_connect_finished.emit(0);
 
                if(err!=0)
                {