A SocketException
указывает на ошибку на сетевом уровне, обычно это ошибка TCP / IP.
Обработайте это одним из двух способов: пусть ваше приложение решит, является ли это постоянной проблемой (брандмауэр, плохое соединение и т. Д.) И уведомит пользователя, или если это временно и может быть восстановлено, в этом случае следует попытаться переподключиться к розетке.
setKeepAlive()
не имеет никакого отношения к перезапуску соединения. Он только продолжает посылать пакеты keep-alive, поэтому соединение не будет разорвано.