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);
SockAddr::SysAddr sa;
Private new_p;
- new_p.handle = ::accept(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), &sa.size);
+ new_p.handle = check_sys_error(::accept(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), &sa.size), "accept");
RefPtr<SockAddr> paddr = SockAddr::new_from_sys(sa);
return new StreamSocket(new_p, *paddr);