private synchronized FutureOperation connectImpl(SocketAddress addr) throws IOException, InterruptedException {
        FutureConnectImpl future = new FutureConnectImpl();
		try {
			if(apiLog.isLoggable(Level.FINE))
				apiLog.fine(this+"Basic.connect called-addr="+addr);
			
			channel.connect(addr);
			
	        isConnected = true;
	        future.connected(this);
		} catch(Exception e) {
			future.failed(this, e);
		}
		
        return future;
	}