Skip to content

Commit b5aff63

Browse files
committed
[NioPeerHandler] Un-set Read interest when we fail to write fully
...as required by the SocketDescriptor.send_data API docs
1 parent 8c0814b commit b5aff63

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/main/java/org/ldk/batteries/NioPeerHandler.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,14 @@ private Peer setup_socket(SocketChannel chan) throws IOException {
6161
@Override
6262
public long send_data(byte[] data, boolean resume_read) {
6363
try {
64-
if (resume_read) {
65-
do_selector_action(() -> peer.key.interestOps(peer.key.interestOps() | SelectionKey.OP_READ));
66-
}
6764
long written = chan.write(ByteBuffer.wrap(data));
6865
if (written != data.length) {
69-
do_selector_action(() -> peer.key.interestOps(peer.key.interestOps() | SelectionKey.OP_WRITE));
70-
}
66+
do_selector_action(() -> peer.key.interestOps(
67+
(peer.key.interestOps() | SelectionKey.OP_WRITE) & (~SelectionKey.OP_READ)));
68+
} else if (resume_read) {
69+
do_selector_action(() -> peer.key.interestOps(
70+
(peer.key.interestOps() | SelectionKey.OP_READ) & (~SelectionKey.OP_WRITE)));
71+
}
7172
return written;
7273
} catch (IOException e) {
7374
// Most likely the socket is disconnected, let the background thread handle it.

0 commit comments

Comments
 (0)