void ReceiveConn(IAsyncResult result)
        {
            TcpListener listener = null;
            Socket      client   = null;

            try
            {
                listener = (TcpListener)result.AsyncState;
                client   = listener.EndAcceptSocket(result);
                client.SetSocketOption(
                    SocketOptionLevel.Tcp,
                    SocketOptionName.NoDelay,
                    true
                    );
            }
            catch (Exception)
            {
                try
                {
                    listener.BeginAcceptSocket(
                        new AsyncCallback(ReceiveConn),
                        listener
                        );
                }
                catch
                {
                    if (!disposed)
                    {
                        Rebuild();
                    }
                }
                return;
            }

            if (disposed)
            {
                return;
            }

            if (client != null)
            {
                // Create the client chain and register the client in the Tcp Manager
                IPEndPoint clientEndPoint;
                DataPipe   chain = null;
                try
                {
                    clientEndPoint = (IPEndPoint)client.RemoteEndPoint;

                    chain = DataPipe.CreateServerTcp(
                        this.server,
                        client
                        );

                    server.RegisterClient(chain);

                    // Send version
                    DataPacket packet = DataPacket.Create(16);
                    packet.Sender      = ipSource;
                    packet.Destination = clientEndPoint;
                    packet.Command     = 0;
                    packet.DataType    = 1;
                    packet.DataCount   = 11;
                    packet.Parameter1  = 0;
                    packet.Parameter2  = 0;
                    client.Send(
                        packet.Data,
                        0,
                        packet.Data.Length,
                        SocketFlags.None
                        );
                }
                catch (Exception)
                {
                    try
                    {
                        if (chain != null)
                        {
                            chain.Dispose();
                        }
                    }
                    catch
                    {
                    }
                }
            }

            // Wait for the next one

            try
            {
                listener.BeginAcceptSocket(
                    new AsyncCallback(ReceiveConn),
                    listener
                    );
            }

            /*catch (ObjectDisposedException)
             * {
             * return ;
             * }*/
            catch (Exception)
            {
                if (!disposed)
                {
                    Rebuild();
                }
            }
        }