клиентский пакет TCP возврата с размером окна 0 приводит к тому, что сервер underTow имеет слишком большое соединение CLOSE_WAIT - PullRequest
0 голосов
/ 08 марта 2020

среда, такая как:
os: CentOS Linux выпуск 7.6.1810 (Core)
веб-сервер: undertow v2.0.20.Final
springBootВерсия: 2.1.5.RELEASE

я обнаружил слишком большое состояние соединения CLOSE_WAIT в моем httpServer, и после tcpdump я обнаружил, что это потому, что мой клиент (сетевой прокси-сервер) отправляет пакет FIN, а после него клиент всегда возвращает размер окна 0, поэтому мой httpserver ждет для отправки данных send-Q, но он не может этого сделать.

результаты tcpdump выглядят так: enter image description here и мой основной код:

    public void hello(HttpServletResponse response) throws IOException {
        String path="C:\\Users\\Administrator\\Desktop\\over.mp4";
        FileInputStream fileInputStream=new FileInputStream(path);
        OutputStream outputStream=response.getOutputStream();
        response.setContentType("video/mp4");

        int byteCount = 0;
        byte[] buffer = new byte[4096];
        int bytesRead = -1;
        while ((bytesRead = fileInputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
            byteCount += bytesRead;
        }
        outputStream.flush();
    }

поэтому мой вопрос в том, какая конфигурация или метод могут позволить underTow отправлять RST-пакет для завершения соединения, когда у клиента возникает какая-либо ошибка, подобная этой проблеме.

...