package com.limegroup.gnutella.io; import java.io.IOException; import java.net.InetAddress; import java.net.SocketAddress; import java.net.UnknownHostException; import com.limegroup.gnutella.util.ThreadFactory; /** * A socket that allows asynchronous connections but is backed * by a legacy I/O Socket. * * This is intended primarily for ease-of-use debugging in swapping out * an NIOSocket with a BlockingSocketAdapter, so that NIO code can be * compared to regular I/O code. */ public class BlockingSocketAdapter extends NBSocket { public BlockingSocketAdapter() { super(); } public BlockingSocketAdapter(InetAddress addr, int port) throws IOException { super(addr, port); } public BlockingSocketAdapter(InetAddress addr, int port, InetAddress localAddr, int localPort) throws IOException { super(addr, port, localAddr, localPort); } public BlockingSocketAdapter(String addr, int port) throws UnknownHostException, IOException { super(addr, port); } public BlockingSocketAdapter(String addr, int port, InetAddress localAddr, int localPort) throws IOException { super(addr, port, localAddr, localPort); } /** * This will spawn a new thread and perform the blocking connect on that thread. * The observer will be notified of the changes. */ public boolean connect(final SocketAddress addr, final int timeout, final ConnectObserver observer) { ThreadFactory.startThread(new Runnable() { public void run() { try { connect(addr, timeout); observer.handleConnect(BlockingSocketAdapter.this); } catch(IOException x) { observer.shutdown(); } } }, "BlockingSocketEmulator"); return false; } }