async Task AcceptAsync(Socket socket) { SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.Completed += (s, a) => SocketExtensions.Complete(s, a, false, a.SocketError == SocketError.Success ? a.AcceptSocket : null); while (!this.closed) { try { args.AcceptSocket = null; Socket acceptSocket = await socket.AcceptAsync(args, SocketFlags.None); if (acceptSocket != null) { var task = this.HandleSocketAsync(acceptSocket); } } catch (ObjectDisposedException) { // listener is closed } catch (Exception exception) { Trace.WriteLine(TraceLevel.Warning, exception.ToString()); } } args.Dispose(); socket.Dispose(); }