private Task StartListen(TcpListener server, CancellationToken cancel_token)
{
server.Start();
return Task<Task>.Factory.StartNew(async () => {
try {
cancel_token.Register(() => {
server.Stop();
});
while (!cancel_token.IsCancellationRequested) {
var client = await server.AcceptTcpClientAsync();
logger.Info("Client connected {0}", client.Client.RemoteEndPoint);
var client_task = ConnectionHandler.HandleClient(
client,
GetAccessControlInfo(client.Client.RemoteEndPoint as IPEndPoint));
}
}
catch (SocketException e) {
if (!IsClosed) throw;
}
catch (ObjectDisposedException) {
}
}).Unwrap();
}