1 #include "platform_api.h"
2 #include <msp/core/refptr.h>
3 #include <msp/core/systemerror.h>
4 #include <msp/io/handle_private.h>
5 #include <msp/strings/format.h>
6 #include "sockaddr_private.h"
7 #include "socket_private.h"
8 #include "streamserversocket.h"
9 #include "streamsocket.h"
16 StreamServerSocket::StreamServerSocket(Family af, int proto):
17 ServerSocket(af, SOCK_STREAM, proto)
20 void StreamServerSocket::listen(const SockAddr &addr, unsigned backlog)
23 throw bad_socket_state("already listening");
27 int err = ::listen(priv->handle, backlog);
29 throw system_error("listen");
31 set_socket_events(S_ACCEPT);
36 StreamSocket *StreamServerSocket::accept()
39 throw bad_socket_state("not listening");
43 new_p.handle = check_sys_error(::accept(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), &sa.size), "accept");
45 RefPtr<SockAddr> paddr = SockAddr::new_from_sys(sa);
46 return new StreamSocket(new_p, *paddr);