Ответ 1
Да.
Исключения всегда должны быть пойманы и обработаны. Это, безусловно, лучшая практика. Исключения составляют структуры потока управления на языке, который позволяет программистам справляться с вещами, которые они не ожидали, или очень редко ожидают.
В вашем сценарии вполне разумно ловить исключения, когда дело доходит до сокетов. Связь TCP/IP не идеальна, и в зависимости от широкого диапазона условий сбой сокета на 100% определен в определенный момент времени.
Я бы порекомендовал, что вы начинаете регистрировать ПОЧЕМУ эти тайм-ауты сокетов происходят. Как правило, они вызваны истощением ресурсов, но где это? Сервер A или Сервер B... или тот клиент...
Тайм-ауты являются симптомом проблемы, которую необходимо исследовать. Хотя вы правильно их обрабатываете, я настоятельно рекомендую добавить некоторые протоколы, чтобы узнать, почему они происходят.