Example #1
0
  /**
   * Process the specified connection.
   *
   * @param socket The socket channel
   * @return <code>true</code> if the socket was correctly configured and processing may continue,
   *     <code>false</code> if the socket needs to be close immediately
   */
  protected boolean setSocketOptions(SocketChannel socket) {
    // Process the connection
    try {
      // disable blocking, APR style, we are gonna be polling it
      socket.configureBlocking(false);
      Socket sock = socket.socket();
      socketProperties.setProperties(sock);

      NioChannel channel = nioChannels.pop();
      if (channel == null) {
        SocketBufferHandler bufhandler =
            new SocketBufferHandler(
                socketProperties.getAppReadBufSize(),
                socketProperties.getAppWriteBufSize(),
                socketProperties.getDirectBuffer());
        if (isSSLEnabled()) {
          channel = new SecureNioChannel(socket, bufhandler, selectorPool, this);
        } else {
          channel = new NioChannel(socket, bufhandler);
        }
      } else {
        channel.setIOChannel(socket);
        channel.reset();
      }
      getPoller0().register(channel);
    } catch (Throwable t) {
      ExceptionUtils.handleThrowable(t);
      try {
        log.error("", t);
      } catch (Throwable tt) {
        ExceptionUtils.handleThrowable(tt);
      }
      // Tell to close the socket
      return false;
    }
    return true;
  }