2 #include <msp/core/refptr.h>
3 #include <msp/core/systemerror.h>
4 #include <msp/strings/format.h>
5 #include "streamlistensocket.h"
6 #include "streamsocket.h"
13 StreamListenSocket::StreamListenSocket(Family af, int proto):
14 Socket(af, SOCK_STREAM, proto),
18 int StreamListenSocket::connect(const SockAddr &)
20 // XXX This function needs to go away
21 throw logic_error("Can't connect a listen socket");
24 void StreamListenSocket::listen(const SockAddr &addr, unsigned backlog)
28 int err = ::listen(handle, backlog);
30 throw system_error("listen");
33 WSAEventSelect(handle, event, FD_ACCEPT);
35 set_events(IO::P_INPUT);
40 StreamSocket *StreamListenSocket::accept()
43 throw bad_socket_state("not listening");
46 socklen_t size = sizeof(sockaddr_storage);
47 SocketHandle new_h = ::accept(handle, reinterpret_cast<sockaddr *>(&sa), &size);
49 RefPtr<SockAddr> paddr = SockAddr::create(sa);
50 return new StreamSocket(new_h, *paddr);