X-Git-Url: http://git.tdb.fi/?p=libs%2Fnet.git;a=blobdiff_plain;f=source%2Fnet%2Fstreamsocket.cpp;h=11887d398c4b09a894c088fb4b3656cd49bf8c45;hp=da5069cee21603110213dcfd3bf6ecc3904ae2ab;hb=88bbb4039aa274c7f41ebe3a18085b63427e5475;hpb=6f6845971a21c2d7e04b87925f5e657f0f20ca0d diff --git a/source/net/streamsocket.cpp b/source/net/streamsocket.cpp index da5069c..11887d3 100644 --- a/source/net/streamsocket.cpp +++ b/source/net/streamsocket.cpp @@ -1,9 +1,4 @@ -#ifdef _WIN32 -#include -#else -#include -#endif -#include +#include "platform_api.h" #include #include #include @@ -18,10 +13,7 @@ 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); + set_socket_events(S_INPUT); } StreamSocket::StreamSocket(Family af, int proto): @@ -34,33 +26,13 @@ bool StreamSocket::connect(const SockAddr &addr) throw bad_socket_state("already connected"); SockAddr::SysAddr sa = addr.to_sys(); - - int err = ::connect(priv->handle, reinterpret_cast(&sa.addr), sa.size); -#ifdef _WIN32 - if(err==SOCKET_ERROR) + int err = ::connect(priv->handle, reinterpret_cast(&sa.addr), sa.size); + bool finished = check_sys_connect_error(err); + if(!finished) { - 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"); + connecting = true; + set_socket_events(S_CONNECT); } -#endif delete peer_addr; peer_addr = addr.copy(); @@ -70,13 +42,10 @@ bool StreamSocket::connect(const SockAddr &addr) getsockname(priv->handle, reinterpret_cast(&lsa.addr), &lsa.size); local_addr = SockAddr::new_from_sys(lsa); - if(err==0) + if(finished) { connected = true; -#ifdef _WIN32 - WSAEventSelect(priv->handle, *priv->event, FD_READ|FD_CLOSE); -#endif - set_events(IO::P_INPUT); + set_socket_events(S_INPUT); signal_connect_finished.emit(0); } @@ -99,18 +68,11 @@ bool StreamSocket::poll_connect(const Time::TimeDelta &timeout) if(err!=0) { - set_events(IO::P_NONE); -#ifdef _WIN32 - throw system_error("connect", WSAGetLastError()); -#else - throw system_error("connect"); -#endif + set_socket_events(S_NONE); + throw system_error("connect", err); } -#ifdef _WIN32 - WSAEventSelect(priv->handle, *priv->event, FD_READ|FD_CLOSE); -#endif - set_events(IO::P_INPUT); + set_socket_events(S_INPUT); connected = true; } @@ -142,10 +104,7 @@ void StreamSocket::on_event(IO::PollEvent ev) 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); + set_socket_events((err==0) ? S_INPUT : S_NONE); } }