]> git.tdb.fi Git - libs/net.git/blobdiff - source/streamsocket.cpp
Prepare for assimilating msphttp
[libs/net.git] / source / streamsocket.cpp
diff --git a/source/streamsocket.cpp b/source/streamsocket.cpp
deleted file mode 100644 (file)
index 8a26245..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-#ifndef WIN32
-#include <sys/socket.h>
-#endif
-#include <cerrno>
-#include <msp/core/systemerror.h>
-#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"
-
-namespace Msp {
-namespace Net {
-
-StreamSocket::StreamSocket(const Private &p, const SockAddr &paddr):
-       ClientSocket(p, paddr)
-{
-#ifdef WIN32
-       WSAEventSelect(priv->handle, *priv->event, FD_READ|FD_CLOSE);
-#endif
-       set_events(IO::P_INPUT);
-}
-
-StreamSocket::StreamSocket(Family af, int proto):
-       ClientSocket(af, SOCK_STREAM, proto)
-{ }
-
-bool StreamSocket::connect(const SockAddr &addr)
-{
-       if(connected)
-               throw bad_socket_state("already connected");
-
-       SockAddr::SysAddr sa = addr.to_sys();
-
-       int err = ::connect(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), sa.size);
-#ifdef WIN32
-       if(err==SOCKET_ERROR)
-       {
-               int err_code = WSAGetLastError();
-               if(err_code==WSAEWOULDBLOCK)
-               {
-                       connecting = true;
-                       WSAEventSelect(priv->handle, *priv->event, FD_CONNECT);
-                       set_events(IO::P_OUTPUT);
-               }
-               else
-                       throw system_error("connect", err_code);
-       }
-#else
-       if(err==-1)
-       {
-               if(errno==EINPROGRESS)
-               {
-                       connecting = true;
-                       set_events(IO::P_OUTPUT);
-               }
-               else
-                       throw system_error("connect");
-       }
-#endif
-
-       delete peer_addr;
-       peer_addr = addr.copy();
-
-       delete local_addr;
-       SockAddr::SysAddr lsa;
-       getsockname(priv->handle, reinterpret_cast<sockaddr *>(&lsa.addr), &lsa.size);
-       local_addr = SockAddr::new_from_sys(lsa);
-
-       if(err==0)
-       {
-               connected = true;
-               set_events(IO::P_INPUT);
-               signal_connect_finished.emit(0);
-       }
-
-       return connected;
-}
-
-bool StreamSocket::poll_connect(const Time::TimeDelta &timeout)
-{
-       if(!connecting)
-               return false;
-
-       IO::PollEvent res = poll(*this, IO::P_OUTPUT, timeout);
-       if(res&IO::P_OUTPUT)
-       {
-               connecting = false;
-
-               int err;
-               socklen_t len = sizeof(int);
-               get_option(SOL_SOCKET, SO_ERROR, &err, &len);
-
-               if(err!=0)
-               {
-                       set_events(IO::P_NONE);
-#ifdef WIN32
-                       throw system_error("connect", WSAGetLastError());
-#else
-                       throw system_error("connect");
-#endif
-               }
-
-#ifdef WIN32
-               WSAEventSelect(priv->handle, *priv->event, FD_READ|FD_CLOSE);
-#endif
-               set_events(IO::P_INPUT);
-
-               connected = true;
-       }
-
-       return connected;
-}
-
-void StreamSocket::on_event(IO::PollEvent ev)
-{
-       if((ev&(IO::P_OUTPUT|IO::P_ERROR)) && connecting)
-       {
-               int err;
-               socklen_t len = sizeof(err);
-               get_option(SOL_SOCKET, SO_ERROR, &err, &len);
-
-               connecting = false;
-               connected = (err==0);
-               if(err)
-               {
-                       system_error exc("connect", err);
-                       signal_connect_finished.emit(&exc);
-               }
-               else
-                       signal_connect_finished.emit(0);
-
-               if(err!=0)
-               {
-                       delete peer_addr;
-                       peer_addr = 0;
-               }
-
-#ifdef WIN32
-               WSAEventSelect(priv->handle, *priv->event, FD_READ|FD_CLOSE);
-#endif
-               set_events((err==0) ? IO::P_INPUT : IO::P_NONE);
-       }
-}
-
-} // namespace Net
-} // namespace Msp