Предположим, что некоторый код активно работает с сокетами: создает клиентские и серверные сокеты, записывает в SocketOutputStream, читает из SocketInputStream и так далее.Конечно, лежащие в основе методы сокетов могут выдавать SocketException
и его производные.
Я различаю два типа ошибок.Ожидаемые ошибки - мы всегда должны ожидать сетевых сбоев и реагировать на них с переподключением или с помощью читаемых пользователем сообщений об ошибках.Существенным примером ожидаемой ошибки является потеря соединения TCP.Неожиданные ошибки - то, что определенно указывает на ошибку в нашем программном обеспечении, такие трассировки стека должны быть тщательно зарегистрированы или даже должны завершить работу всего приложения.
Я не нашел надежного способа отличить SocketException, вызванное потерей соединения, от любого другогоошибки сокета.В SocketException нет кода ошибки и нет подклассов.Все методы из пакета java.net
выдают только SocketException
с различными сообщениями об ошибках:
Есть ли способ определить, что конкретный SocketException
был вызван потерянным TCP-соединением, или единственный способ - проанализировать сообщения об ошибках?Если так, может, существует библиотека, которая выполняет эту проверку?Или, может быть, я делаю что-то не так и должен всегда / никогда не игнорировать какие-либо особенности SocketExceptions их природы?