Я не понимаю, откуда у вас писатель, поэтому я предполагаю, что это из response.getWriter ().
То, что я думаю, может произойти, это то, что Jetty буферизует ответ внутренне перед отправкой его клиенту. Это необходимо сделать, потому что необходимо рассчитать размер ответа, чтобы он мог установить поле «Content-Length» в заголовке ответа HTTP. Это нужно клиенту, чтобы он знал, сколько читать. (Ну, на самом деле это не обязательно, но это другое обсуждение.)
Я думаю, что Джетти на самом деле не отправляет данные, пока вы не закроете писателя. Я также думаю, что flush () ничего не делает, потому что не может отправлять данные, пока не узнает, что больше не будет. И он не проверяет, активно ли соединение, пока вы пишете в этот буферный поток.
Попробуйте это для вашей петли:
for(String line = reader.readLine(); line != null && !writer.checkError(); line = reader.readLine()) {
getServletContext().log( line );
writer.println( line );
writer.flush();
Thread.sleep( 1500 ); // for testing
}
Я думаю, что возможно writer.checkError () распространяется до фактического выходного потока сокета и проверяет, открыт ли он до сих пор.
Редактировать 1: Хммм, неважно, я пропустил бит, где вы сказали, что flush () отправляет данные в curl. Тем не менее, попробуйте checkError () в вашем цикле и дайте мне знать, если это работает.