X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fnet%2Fstreamserversocket.cpp;h=817145bcff15c024469e64f10cdcfe8516e4e551;hb=HEAD;hp=e408dcedfb6ae6c2506e3fd81565c7da7d04f947;hpb=136c9eec2b72bfad4788908de5552fbd62216148;p=libs%2Fnet.git diff --git a/source/net/streamserversocket.cpp b/source/net/streamserversocket.cpp index e408dce..8e655fc 100644 --- a/source/net/streamserversocket.cpp +++ b/source/net/streamserversocket.cpp @@ -1,14 +1,11 @@ -#ifdef _WIN32 -#include -#endif -#include +#include "platform_api.h" +#include "streamserversocket.h" #include #include #include #include #include "sockaddr_private.h" #include "socket_private.h" -#include "streamserversocket.h" #include "streamsocket.h" using namespace std; @@ -17,22 +14,21 @@ namespace Msp { namespace Net { StreamServerSocket::StreamServerSocket(Family af, int proto): - ServerSocket(af, SOCK_STREAM, proto), - listening(false) + ServerSocket(af, SOCK_STREAM, proto) { } void StreamServerSocket::listen(const SockAddr &addr, unsigned backlog) { + if(listening) + throw bad_socket_state("already listening"); + bind(addr); int err = ::listen(priv->handle, backlog); if(err==-1) throw system_error("listen"); -#ifdef _WIN32 - WSAEventSelect(priv->handle, *priv->event, FD_ACCEPT); -#endif - set_events(IO::P_INPUT); + set_socket_events(S_ACCEPT); listening = true; } @@ -44,7 +40,7 @@ StreamSocket *StreamServerSocket::accept() SockAddr::SysAddr sa; Private new_p; - new_p.handle = ::accept(priv->handle, reinterpret_cast(&sa.addr), &sa.size); + new_p.handle = check_sys_error(::accept(priv->handle, reinterpret_cast(&sa.addr), &sa.size), "accept"); RefPtr paddr = SockAddr::new_from_sys(sa); return new StreamSocket(new_p, *paddr);