diff --git a/src/main/java/org/cryptomator/ipc/Server.java b/src/main/java/org/cryptomator/ipc/Server.java index 770373681..193a2ff6b 100644 --- a/src/main/java/org/cryptomator/ipc/Server.java +++ b/src/main/java/org/cryptomator/ipc/Server.java @@ -53,18 +53,26 @@ class Server implements IpcCommunicator { @Override public void listen(IpcMessageListener listener, Executor executor) { executor.execute(() -> { + int errorCount = 0; while (serverSocketChannel.isOpen()) { try (var ch = serverSocketChannel.accept()) { while (ch.isConnected()) { var msg = IpcMessage.receive(ch); listener.handleMessage(msg); } + errorCount = 0; } catch (AsynchronousCloseException e) { + LOG.info("Closing server socket due to closed channel."); return; // serverSocketChannel closed or listener interrupted } catch (EOFException | ClosedChannelException e) { // continue with next connected client } catch (IOException e) { + errorCount++; LOG.error("Failed to read IPC message", e); + if(errorCount > 100) { //apparently something is broken, prevent log spam + LOG.info("Closing server socket due to too many failed requests."); + return; + } } } });