Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
Description
Proposal: In AS.handleRead(..) add
if (read == -1) { // EOF
reachedEOF = true;
ioLoop.updateHandler(channel, interestOps &= ~SelectionKey.OP_READ);
if (writeBuffer.position() == 0)
return;
}
(the invokeCloseCallback() + surronding if statement is new)
Found this issue during DEFT-151 (disitributed demo application).
The problem is that its easy to leak connection if we dont handle this case. The problem is that you never will get a notification/callback that the client/server is down (if you only are reading from the asynchronous socket, as soon as you try to write to the socket, you will get a close callback....but that is only if you acctually try to write on the socket).