Как приложение Java может быть проинформировано о получении [FIN,ACK] по TCP-соединению?

У меня установлено 2 соединения от экземпляра JMeter до сервера Apache и от сервера Apache до приложения Java, развернутого в Jonas.

Когда я убиваю процесс JMeter, соединение с Apache закрывается с помощью [RST]. Затем Apache отправляет [FIN, ACK] Джонасу. Джонас не отправил все данные, поэтому продолжает отправлять данные. Йонас закрывает соединение позже [FIN,ACK]. Это поведение описано в TCP RFC.

Итак, проблема в том, что Apache получает все данные от Jonas, даже если Apache не может отправить их в JMeter.

У меня такой вопрос: может ли мое Java-приложение быть запущено при получении FIN, ACK от Apache?

2 ответа

Решение

Не напрямую, в конечном итоге java может выдать IOException из InputStream или OutputStream, но это зависит от платформы.

До выхода JDK 7 говорили о реализации Java "сырых сокетов", но почему-то я не думаю, что она когда-либо была запущена.

Может ли мое Java-приложение запускаться при получении FIN,ACK от Apache?

Да, но вы должны были бы читать из соединения. Вы получите конец потока в одной из его различных форм, в зависимости от того, какой метод чтения вы вызываете. Смотрите Javadoc.

Другие вопросы по тегам