internal static bool TryOpenDataConnection(FtpSession session, out DataConnection dataConnection)
        {
            dataConnection = null;

            int tryPort = session.AppServer.FtpServiceProvider.GetRandomPort();
            int previousPort = tryPort;
            int tryTimes = 0;

            IPAddress ipAddress = session.LocalEndPoint.Address;

            while (true)
            {
                var listenSocket = TryListenSocketPort(ipAddress, tryPort);

                if (listenSocket != null)
                {
                    dataConnection = new DataConnection(session, listenSocket, tryPort);
                    return true;
                }

                tryTimes++;

                if (tryTimes > 5)
                {
                    return false;
                }

                tryPort = session.AppServer.FtpServiceProvider.GetRandomPort();

                if (previousPort == tryPort)
                {
                    return false;
                }
            }
        }
        internal static bool TryOpenDataConnection(FtpSession session, int port, out DataConnection dataConnection)
        {
            IPAddress ipAddress = session.LocalEndPoint.Address;
            var listenSocket = TryListenSocketPort(ipAddress, port);

            if (listenSocket != null)
            {
                dataConnection = new DataConnection(session, listenSocket, port);
                return true;
            }

            dataConnection = null;
            return false;
        }