@Override public void run() { try { long idleTime = (System.currentTimeMillis() - socket.getLastAccess()) / 1000; if (idleTime >= timeout) { if (!socket.getSocket().isClosed()) { logger.debug( "Connection {}:{} has been idle for {} seconds", socket.getSocket().getInetAddress(), socket.getSocket().getPort(), idleTime); logger.debug( "Closing connection {}:{}", socket.getSocket().getInetAddress(), socket.getSocket().getPort()); socket.close(); } } } catch (IOException e) { logger.error( "Error closing connection {}:{}", socket.getSocket().getInetAddress(), socket.getSocket().getPort()); } }