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; }