in log4j-server/src/main/java/org/apache/logging/log4j/server/TcpSocketServer.java [296:337]
public void run() {
final EntryMessage entry = logger.traceEntry();
while (isActive()) {
if (serverSocket.isClosed()) {
return;
}
try {
// Accept incoming connections.
logger.debug("Listening for a connection {}...", serverSocket);
@SuppressWarnings("resource") // clientSocket is closed during SocketHandler shutdown
final Socket clientSocket = serverSocket.accept();
logger.debug("Accepted connection on {}...", serverSocket);
logger.debug("Socket accepted: {}", clientSocket);
clientSocket.setSoLinger(true, 0);
// accept() will block until a client connects to the server.
// If execution reaches this point, then it means that a client
// socket has been accepted.
final SocketHandler handler = new SocketHandler(clientSocket);
handlers.put(Long.valueOf(handler.getId()), handler);
handler.start();
} catch (final IOException e) {
if (serverSocket.isClosed()) {
// OK we're done.
logger.traceExit(entry);
return;
}
logger.error("Exception encountered on accept. Ignoring. Stack trace :", e);
}
}
for (final Map.Entry<Long, SocketHandler> handlerEntry : handlers.entrySet()) {
final SocketHandler handler = handlerEntry.getValue();
handler.shutdown();
try {
handler.join();
} catch (final InterruptedException ignored) {
// Ignore the exception
}
}
logger.traceExit(entry);
}