X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fstreamlistensocket.cpp;h=681adeddb8ab95957b5eab200b718f8f3298e9a3;hb=dbfb303f336037cf7ca4fca3d8bfe504c624b501;hp=ccb683a1a31937b18b46db991aad021ea6b8fec8;hpb=729a80158708fd499d942663eb5115d93d247f46;p=libs%2Fnet.git diff --git a/source/streamlistensocket.cpp b/source/streamlistensocket.cpp index ccb683a..681aded 100644 --- a/source/streamlistensocket.cpp +++ b/source/streamlistensocket.cpp @@ -1,9 +1,15 @@ #include #include +#include +#include #include +#include "sockaddr_private.h" +#include "socket_private.h" #include "streamlistensocket.h" #include "streamsocket.h" +using namespace std; + namespace Msp { namespace Net { @@ -14,19 +20,20 @@ StreamListenSocket::StreamListenSocket(Family af, int proto): int StreamListenSocket::connect(const SockAddr &) { - throw Exception("Can't connect a listen socket"); + // XXX This function needs to go away + throw logic_error("Can't connect a listen socket"); } void StreamListenSocket::listen(const SockAddr &addr, unsigned backlog) { bind(addr); - int err = ::listen(handle, backlog); + int err = ::listen(priv->handle, backlog); if(err==-1) - throw SystemError("Unable to listen", errno); + throw system_error("listen"); #ifdef WIN32 - WSAEventSelect(handle, event, FD_ACCEPT); + WSAEventSelect(priv->handle, *priv->event, FD_ACCEPT); #endif set_events(IO::P_INPUT); @@ -36,14 +43,14 @@ void StreamListenSocket::listen(const SockAddr &addr, unsigned backlog) StreamSocket *StreamListenSocket::accept() { if(!listening) - throw InvalidState("Socket is not listening"); + throw bad_socket_state("not listening"); - sockaddr_storage sa; - socklen_t size = sizeof(sockaddr_storage); - SocketHandle new_h = ::accept(handle, reinterpret_cast(&sa), &size); + SockAddr::SysAddr sa; + Private new_p; + new_p.handle = ::accept(priv->handle, reinterpret_cast(&sa.addr), &sa.size); - RefPtr paddr = SockAddr::create(sa); - return new StreamSocket(new_h, *paddr); + RefPtr paddr = SockAddr::from_sys(sa); + return new StreamSocket(new_p, *paddr); } } // namespace Net