001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.apache.commons.net;
019    
020    import java.io.IOException;
021    import java.net.InetAddress;
022    import java.net.ServerSocket;
023    import java.net.Socket;
024    import java.net.UnknownHostException;
025    
026    import javax.net.SocketFactory;
027    
028    /***
029     * DefaultSocketFactory implements the SocketFactory interface by
030     * simply wrapping the java.net.Socket and java.net.ServerSocket
031     * constructors.  It is the default SocketFactory used by
032     * {@link org.apache.commons.net.SocketClient}
033     * implementations.
034     * <p>
035     * <p>
036     * @author Daniel F. Savarese
037     * @see SocketFactory
038     * @see SocketClient
039     * @see SocketClient#setSocketFactory
040     ***/
041    
042    public class DefaultSocketFactory extends SocketFactory
043    {
044    
045        /***
046         * Creates a Socket connected to the given host and port.
047         * <p>
048         * @param host The hostname to connect to.
049         * @param port The port to connect to.
050         * @return A Socket connected to the given host and port.
051         * @exception UnknownHostException  If the hostname cannot be resolved.
052         * @exception IOException If an I/O error occurs while creating the Socket.
053         ***/
054        @Override
055        public Socket createSocket(String host, int port)
056        throws UnknownHostException, IOException
057        {
058            return new Socket(host, port);
059        }
060    
061        /***
062         * Creates a Socket connected to the given host and port.
063         * <p>
064         * @param address The address of the host to connect to.
065         * @param port The port to connect to.
066         * @return A Socket connected to the given host and port.
067         * @exception IOException If an I/O error occurs while creating the Socket.
068         ***/
069        @Override
070        public Socket createSocket(InetAddress address, int port)
071        throws IOException
072        {
073            return new Socket(address, port);
074        }
075    
076        /***
077         * Creates a Socket connected to the given host and port and
078         * originating from the specified local address and port.
079         * <p>
080         * @param host The hostname to connect to.
081         * @param port The port to connect to.
082         * @param localAddr  The local address to use.
083         * @param localPort  The local port to use.
084         * @return A Socket connected to the given host and port.
085         * @exception UnknownHostException  If the hostname cannot be resolved.
086         * @exception IOException If an I/O error occurs while creating the Socket.
087         ***/
088        @Override
089        public Socket createSocket(String host, int port,
090                                   InetAddress localAddr, int localPort)
091        throws UnknownHostException, IOException
092        {
093            return new Socket(host, port, localAddr, localPort);
094        }
095    
096        /***
097         * Creates a Socket connected to the given host and port and
098         * originating from the specified local address and port.
099         * <p>
100         * @param address The address of the host to connect to.
101         * @param port The port to connect to.
102         * @param localAddr  The local address to use.
103         * @param localPort  The local port to use.
104         * @return A Socket connected to the given host and port.
105         * @exception IOException If an I/O error occurs while creating the Socket.
106         ***/
107        @Override
108        public Socket createSocket(InetAddress address, int port,
109                                   InetAddress localAddr, int localPort)
110        throws IOException
111        {
112            return new Socket(address, port, localAddr, localPort);
113        }
114    
115        /***
116         * Creates a ServerSocket bound to a specified port.  A port
117         * of 0 will create the ServerSocket on a system-determined free port.
118         * <p>
119         * @param port  The port on which to listen, or 0 to use any free port.
120         * @return A ServerSocket that will listen on a specified port.
121         * @exception IOException If an I/O error occurs while creating
122         *                        the ServerSocket.
123         ***/
124        public ServerSocket createServerSocket(int port) throws IOException
125        {
126            return new ServerSocket(port);
127        }
128    
129        /***
130         * Creates a ServerSocket bound to a specified port with a given
131         * maximum queue length for incoming connections.  A port of 0 will
132         * create the ServerSocket on a system-determined free port.
133         * <p>
134         * @param port  The port on which to listen, or 0 to use any free port.
135         * @param backlog  The maximum length of the queue for incoming connections.
136         * @return A ServerSocket that will listen on a specified port.
137         * @exception IOException If an I/O error occurs while creating
138         *                        the ServerSocket.
139         ***/
140        public ServerSocket createServerSocket(int port, int backlog)
141        throws IOException
142        {
143            return new ServerSocket(port, backlog);
144        }
145    
146        /***
147         * Creates a ServerSocket bound to a specified port on a given local
148         * address with a given maximum queue length for incoming connections.
149         * A port of 0 will
150         * create the ServerSocket on a system-determined free port.
151         * <p>
152         * @param port  The port on which to listen, or 0 to use any free port.
153         * @param backlog  The maximum length of the queue for incoming connections.
154         * @param bindAddr  The local address to which the ServerSocket should bind.
155         * @return A ServerSocket that will listen on a specified port.
156         * @exception IOException If an I/O error occurs while creating
157         *                        the ServerSocket.
158         ***/
159        public ServerSocket createServerSocket(int port, int backlog,
160                                               InetAddress bindAddr)
161        throws IOException
162        {
163            return new ServerSocket(port, backlog, bindAddr);
164        }
165    }