[NioPeerHandler] Un-set Read interest when we fail to write fully
[ldk-java] / src / main / java / org / ldk / batteries / NioPeerHandler.java
index b722d96d8c1408568659466d87433821bf29bd18..71d31938e7a7ef1d31ea8e5fe16e64a1c6c26538 100644 (file)
@@ -61,13 +61,14 @@ public class NioPeerHandler {
             @Override
             public long send_data(byte[] data, boolean resume_read) {
                 try {
-                    if (resume_read) {
-                        do_selector_action(() -> peer.key.interestOps(peer.key.interestOps() | SelectionKey.OP_READ));
-                    }
                     long written = chan.write(ByteBuffer.wrap(data));
                     if (written != data.length) {
-                        do_selector_action(() -> peer.key.interestOps(peer.key.interestOps() | SelectionKey.OP_WRITE));
-                    }
+                        do_selector_action(() -> peer.key.interestOps(
+                                                       (peer.key.interestOps() | SelectionKey.OP_WRITE) & (~SelectionKey.OP_READ)));
+                    } else if (resume_read) {
+                        do_selector_action(() -> peer.key.interestOps(
+                                                       (peer.key.interestOps() | SelectionKey.OP_READ) & (~SelectionKey.OP_WRITE)));
+                                       }
                     return written;
                 } catch (IOException e) {
                     // Most likely the socket is disconnected, let the background thread handle it.