void AcceptConnection(IAsyncResult asyncResult)
        {
            Socket connection = null;

            try
            {
                if (_disposed)
                {
                    return;
                }

                connection = _socket.EndAccept(asyncResult);

                ReceiveFromConnection(connection);
            }
            catch (ObjectDisposedException)
            {
            }
            catch (Exception)
            {
                connection.CloseAndDispose();
            }
            finally
            {
                if (!_disposed)
                {
                    _socket.BeginAccept(AcceptConnection, null);
                }
            }
        }