public bool listen(int port, int backlog, AcceptCallback accept_cb)
{
is_server = true;
this.accept_cb = accept_cb;
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
setNonBlocking();
sock.Bind(new IPEndPoint(IPAddress.Any, port));
server_port = ((IPEndPoint) sock.LocalEndPoint).Port;
sock.Listen(backlog);
if (!initializeSocket())
return false;
if ((flags & (int)Flags.SYNCHRONOUS) == 0)
enableRead();
return true;
}