private void handleConnection()

in java/io/bazel/rules/closure/http/HttpServer.java [126:169]


    private void handleConnection() throws Exception {
      UnbufferableInputStream input = new UnbufferableInputStream(socket.getInputStream(), 8192);
      OutputStream output = socket.getOutputStream();
      HttpConnectionComponent<?, ?, ?> connectionComponent =
          component
              .newConnectionComponentBuilder()
              .socket(socket)
              .input(input)
              .output(output)
              .build();
      while (socket.isConnected() && !socket.isClosed() && !socket.isInputShutdown()) {
        HttpRequest request;
        try {
          request = HttpParser.readHttpRequest(input);
        } catch (HttpParserError e) {
          logger.warning(e.toString());
          ByteStreams.copy(
              new HttpResponse()
                  .setStatus(400, e.getMessage())
                  .setHeader("Connection", "close")
                  .openStream(),
              output);
          return;
        }
        if (request == null) {
          break;
        }
        HttpResponse response = request.newResponse();
        try {
          connectionComponent
              .newRequestComponentBuilder()
              .request(request)
              .response(response)
              .build()
              .handler()
              .handle();
        } finally {
          response.getPayload().close();
        }
        if (response.getHeader("Connection").equals("close")) {
          break;
        }
      }
    }