Qué hacer cuando ServerSocket lanza IOException y mantiene el servidor en ejecución

Básicamente quiero crear un servidor de roca sólida.

while (keepRunning.get()) { try { Socket clientSocket = serverSocket.accept(); ... spawn a new thread to handle the client ... } catch (IOException e) { e.printStackTrace(); // NOW WHAT? } } 

En el bloque IOException, ¿qué hacer? ¿Es el zócalo del servidor el que falla, por lo que debe ser recreado? Por ejemplo, espere unos segundos y luego

 serverSocket = ServerSocketFactory.getDefault().createServerSocket(MY_PORT); 

Sin embargo, si el zócalo del servidor todavía está bien, es una pena cerrarlo y eliminar todas las conexiones aceptadas que aún se están comunicando.

EDIT: Después de algunas respuestas, aquí mi bash de lidiar con la excepción IOException. ¿La implementación garantizaría mantener el servidor activo y solo recrearía el socket del servidor cuando solo fuera necesario?

 while (keepRunning.get()) { try { Socket clientSocket = serverSocket.accept(); ... spawn a new thread to handle the client ... bindExceptionCounter = 0; } catch (IOException e) { e.printStackTrace(); recreateServerSocket(); } } private void recreateServerSocket() { while (keepRunning) { try { logger.info("Try to re-create Server Socket"); ServerSocket socket = ServerSocketFactory.getDefault().createServerSocket(RateTableServer.RATE_EVENT_SERVER_PORT); // No exception thrown, then use the new socket. serverSocket = socket; break; } catch (BindException e) { logger.info("BindException indicates that the server socket is still good.", e); bindExceptionCounter++; if (bindExceptionCounter < 5) { break; } } catch (IOException e) { logger.warn("Problem to re-create Server Socket", e); e.printStackTrace(); try { Thread.sleep(30000); } catch (InterruptedException ie) { logger.warn(ie); } } } }