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;
}
}
}