code: static void connect(SocketChannel channel, 
                        SocketAddress endpoint, int timeout) throws IOException {
      
      boolean blockingOn = channel.isBlocking();
      if (blockingOn) {
        channel.configureBlocking(false);
      }
      
      try { 
        if (channel.connect(endpoint)) {
          return;
        }
  
        long timeoutLeft = timeout;
        long endTime = (timeout > 0) ? (System.currentTimeMillis() + timeout): 0;
        
        while (true) {
          // we might have to call finishConnect() more than once
          // for some channels (with user level protocols)
          
          int ret = selector.select((SelectableChannel)channel, 
                                    SelectionKey.OP_CONNECT, timeoutLeft);
          
          if (ret > 0 && channel.finishConnect()) {
            return;
          }
          
          if (ret == 0 ||
              (timeout > 0 &&  
                (timeoutLeft = (endTime - System.currentTimeMillis())) <= 0)) {
            throw new SocketTimeoutException(
                      timeoutExceptionString(channel, timeout, 
                                             SelectionKey.OP_CONNECT));
          }
        }
      } catch (IOException e) {
        // javadoc for SocketChannel.connect() says channel should be closed.
        try {
          channel.close();
        } catch (IOException ignored) {}
        throw e;
      } finally {
        if (blockingOn && channel.isOpen()) {
          channel.configureBlocking(true);
        }
      }
    }
docs: The contract is similar to {@link SocketChannel#connect(SocketAddress)}
  with a timeout.
  
  @see SocketChannel#connect(SocketAddress)
  
  @param channel - this should be a {@link SelectableChannel}
  @param endpoint
  @throws IOException