2013-12-02 2 views
0

Как я могу проверить, что мое приложение закрывает определенное HTTP-соединение?Убедитесь, что сокет закрыт.

Близкая логика глубоко внутри сложной библиотеки, поэтому это не очевидно.

Я попытался использовать отладчик Eclipse и поставил точку останова на java.io.Closeable, но Eclipse сказал, что я не могу поставить точку останова на метод интерфейса.

ответ

1

В Linux запустите sudo ss -r -p | grep java в командной строке, чтобы проверить, все еще открыт сокет. Если ss не установлен, вы можете использовать netstat. (Эквивалент Окна grep является find, хотя я не знаю точную команду для использования на Windows).

Если вы готовы к Grep только конечный сервер или порт, вам не нужно sudo или -p опция в этом случае.

Внимание: Обратите внимание, что для HTTP, если сервер отправляет Content-Length заголовок, или тип ответа с implied content length, или использует Transfer-Encoding: chunked затем клиентские библиотеки HTTP, которые поддерживают соединение поддерживать может держать фактическое гнездо открытым, даже если вы вызываете close() на InputStream (дополнительная подсказка здесь заключается в том, что curl/libcurl напечатает сообщение о том, что соединение сохранено в живых, если вы используете curl, чтобы сделать тестовый запрос). Но если сервер не делает ничего из этого, это невозможно, поэтому в этом случае соединение должно быть закрыто.

Смежные вопросы