private Optional<SocketSession> establishSocketSession(Socket socket){
		try {
			var session = new Session(server, this, socket);
			return Optional.of(new SocketSession(socket, session));
		} catch (final IOException e) {
			connectionPermits.release();
			LOGGER.error("Error while starting a connection", e);
			try {
				socket.close();
			} catch (final IOException e1) {
				LOGGER.debug("Cannot close socket after exception", e1);
			}
			return Optional.empty();
		}
	}
Accept connections and run them in session threads until shutdown.
src/main/java/de/gessnerfl/fakesmtp/smtp/server/BaseSmtpServerRunnable.java