示例#1
0
 internal virtual FTPDataSocket NewActiveDataSocket(int port)
 {
     BaseSocket sock = new StandardSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     try
     {
         this.log.Debug("NewActiveDataSocket(" + port + ")");
         IPEndPoint localEP = new IPEndPoint(((IPEndPoint) this.controlSock.LocalEndPoint).Address, port);
         sock.Bind(localEP);
         sock.Listen(5);
         this.SetDataPort((IPEndPoint) sock.LocalEndPoint);
     }
     catch (Exception exception)
     {
         this.log.Error("Failed to create listening socket", exception);
         sock.Close();
         throw;
     }
     return new FTPActiveDataSocket(sock);
 }
        /// <summary> 
        /// Constructs a new <code>FTPDataSocket</code> object (server mode) which will
        /// listen on the given port number.
        /// </summary>
        /// <param name="port">Remote port to listen on.
        /// </param>
        /// <returns> A new <code>FTPDataSocket</code> object (server mode) which is
        /// configured to listen on the given port.
        /// </returns>
        /// <throws>  SystemException Thrown if an error occurred when creating the socket.  </throws>
        internal virtual FTPDataSocket NewActiveDataSocket(int port)
        {
            // create listening socket at a system allocated port
            BaseSocket sock =
                new StandardSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            // choose any port
            IPEndPoint endPoint = new IPEndPoint(((IPEndPoint)controlSock.LocalEndPoint).Address, 0);
            sock.Bind(endPoint);

            // queue up to 5 connections
            sock.Listen(5);

            // find out ip & port we are listening on
            SetDataPort((IPEndPoint)sock.LocalEndPoint);

            return new FTPActiveDataSocket(sock);
        }
示例#3
0
        /// <summary> 
        /// Constructs a new <code>FTPDataSocket</code> object (server mode) which will
        /// listen on the given port number.
        /// </summary>
        /// <param name="port">Remote port to listen on.
        /// </param>
        /// <returns> A new <code>FTPDataSocket</code> object (server mode) which is
        /// configured to listen on the given port.
        /// </returns>
        /// <throws>  SystemException Thrown if an error occurred when creating the socket.  </throws>
        internal virtual FTPDataSocket NewActiveDataSocket(int port)
        {                        
            // create listening socket at a system allocated port
            BaseSocket sock = 
                new StandardSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, logTag);

            try
            {
                log.Debug("NewActiveDataSocket(" + port + ")");
                
                // choose specified port and listen on all interfaces
                IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, port);
                sock.Bind(endPoint);     

                // queue up to 5 connections
                sock.Listen(5);
                
                // send the *control socket IP* to the server with the listening socket's port
                endPoint = new IPEndPoint(((IPEndPoint)controlSock.LocalEndPoint).Address, ((IPEndPoint)sock.LocalEndPoint).Port);
                SetDataPort(endPoint);
            }
            catch (Exception ex)
            {
                log.Error("Failed to create listening socket", ex);
                sock.Close();
                throw;
            }

            return new FTPActiveDataSocket(sock);
        }