public void Dispose()
        {
            lock (ThisLock)
            {
                if (isDisposed)
                {
                    return;
                }

                isDisposed = true;
            }

            for (int i = 0; i < connectionReaders.Count; i++)
            {
                connectionReaders[i].Dispose();
            }

            connectionReaders.Clear();
            acceptor.Dispose();
        }