private void AcceptCallback(IAsyncResult result)
{
var listener = (Socket)result.AsyncState;
try
{
var client = listener.EndAccept(result);
var clientStream = new Client(client);
lock (_clients)
{
_clients.Add(clientStream);
}
clientStream.Stream.BeginRead(_buffer, 0, _buffer.Length, ReadCompleted, clientStream);
if (ClientConnected != null)
ClientConnected(this, new EventArgs());
}
catch
{
}
finally
{
listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
}
if (_nextClientCleanup < DateTime.Now) {
var cleanupThread = new Thread(cleanupClients);
cleanupThread.Start();
_nextClientCleanup = DateTime.Now.AddSeconds(10);
}
}