private void processRequest(final Socket socket) {
    executor.execute(() -> {

      final long startTime = nanoTimeSupplier.getAsLong();
      DataInputStream input = null;
      try {
        socket.setSoTimeout(readTimeout);
        socketCreator.forCluster().handshakeIfSocketIsSSL(socket, readTimeout);

        try {
          input = new DataInputStream(socket.getInputStream());
        } catch (StreamCorruptedException e) {
          // Some garbage can be left on the socket stream
          // if a peer disappears at exactly the wrong moment.
          logger.debug("Discarding illegal request from "
              + (socket.getInetAddress().getHostAddress() + ":" + socket.getPort()), e);
          return;
        }
        // read the first byte & check for an improperly configured client pool trying
        // to contact a cache server
        int firstByte = input.readUnsignedByte();

        boolean handled = protocolChecker.checkProtocol(socket, input, firstByte);

        if (!handled) {
          if (firstByte == GOSSIP_BYTE) {
            processOneConnection(socket, startTime, input);
          } else {
            rejectUnknownProtocolConnection(socket, firstByte);
          }
        }
      } catch (EOFException | SocketException ignore) {
        // client went away - ignore
      } catch (SocketTimeoutException ex) {
        final String sender = socket.getInetAddress().getHostAddress();
        // Do not want the full stack trace to fill up the logs
        logger.info("Exception in processing request from " + sender + ": " + ex.getMessage());
      } catch (ClassNotFoundException ex) {
        final String sender = socket.getInetAddress().getHostAddress();
        logger.info("Unable to process request from " + sender + " exception=" + ex.getMessage());
      } catch (Exception ex) {
        String sender = null;
        if (socket != null) {
          sender = socket.getInetAddress().getHostAddress();
        }
        if (ex instanceof IOException) {
          // IOException could be caused by a client failure. Don't
          // log with severe.
          if (!socket.isClosed()) {
            logger.info("Exception in processing request from " + sender, ex);
          }
        } else {
          logger.fatal("Exception in processing request from " + sender, ex);
        }

      } catch (Throwable ex) {
        final String sender = socket.getInetAddress().getHostAddress();
        try {
          logger.fatal("Exception in processing request from " + sender, ex);
        } catch (Throwable t) {
          t.printStackTrace();
        }
      } finally {
        try {
          socket.close();
        } catch (IOException ignore) {
          // ignore
        }
        if (input != null) {
          try {
            input.close();
          } catch (IOException ignore) {

          }
        }
      }
    });
  }
fix for bug 33711 - client requests are spun off to another thread for processing. Requests are
synchronized in processGossip.
geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java