Java tutorial
/* * Fabric3 * Copyright (c) 2009-2013 Metaform Systems * * Fabric3 is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version, with the * following exception: * * Linking this software statically or dynamically with other * modules is making a combined work based on this software. * Thus, the terms and conditions of the GNU General Public * License cover the whole combination. * * As a special exception, the copyright holders of this software * give you permission to link this software with independent * modules to produce an executable, regardless of the license * terms of these independent modules, and to copy and distribute * the resulting executable under terms of your choice, provided * that you also meet, for each linked independent module, the * terms and conditions of the license of that module. An * independent module is a module which is not derived from or * based on this software. If you modify this software, you may * extend this exception to your version of the software, but * you are not obligated to do so. If you do not wish to do so, * delete this exception statement from your version. * * Fabric3 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the * GNU General Public License along with Fabric3. * If not, see <http://www.gnu.org/licenses/>. */ package org.fabric3.binding.ftp.runtime; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import org.apache.commons.net.DefaultSocketFactory; /** * Overrides the DefaultSocketFactory behavior provided by Apache Commons Net by setting a timeout for opening a socket connection. */ public class ExpiringSocketFactory extends DefaultSocketFactory { private final int connectTimeout; /** * Constructor. * * @param connectTimeout the timeout to wait in milliseconds to open a connection. */ public ExpiringSocketFactory(int connectTimeout) { this.connectTimeout = connectTimeout; } public Socket createSocket(String host, int port) throws IOException { InetSocketAddress address = new InetSocketAddress(host, port); return createSocket(address, null); } public Socket createSocket(InetAddress address, int port) throws IOException { InetSocketAddress socketAddress = new InetSocketAddress(address, port); return createSocket(socketAddress, null); } public Socket createSocket(String host, int port, InetAddress localAddr, int localPort) throws IOException { if (host != null) { return createSocket(new InetSocketAddress(host, port), new InetSocketAddress(localAddr, localPort)); } else { return createSocket(new InetSocketAddress(InetAddress.getByName(null), port), new InetSocketAddress(localAddr, localPort)); } } public Socket createSocket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException { if (address != null) { return createSocket(new InetSocketAddress(address, port), new InetSocketAddress(localAddr, localPort)); } else { return createSocket(null, new InetSocketAddress(localAddr, localPort)); } } private Socket createSocket(InetSocketAddress socketAddress, InetSocketAddress localSocketAddress) throws IOException { Socket socket = new Socket(); if (localSocketAddress != null) { socket.bind(localSocketAddress); } socket.connect(socketAddress, connectTimeout); return socket; } }