Detecting remote NIO sockets closed
David Daney
ddaney@avtrex.com
Fri Sep 17 22:55:00 GMT 2004
Stanley Brown wrote:
> Found another NIO sockets issue. For some reason an OP_READ event is
> never issued when a non-blocking socket has concluded. This is a
> problem because, from my understanding, the only way to know you've
> reached the end of one of these is by recieving an OP_READ and getting a
> -1 back when attempting to read from the channel.
>
> Example: http://javaalmanac.com/egs/java.nio/DetectClosed.html
>
> I dug around a bit and I think that the problem resides in
> natSelectorImplWin32.cc:
>
> aArray[nCurIndex++].init(pReadFD[i], FD_ACCEPT | FD_READ);
>
> Shouldnt we take interest in closing fd's?
>
> aArray[nCurIndex++].init(pReadFD[i], FD_ACCEPT | FD_READ | FD_CLOSE);
It may be that there is an error in libgcj, but the article you refer to
contains incorrect information.
Reads are usless for detecting connections that have not terminated
"normally". Doing a write is the only reliable method for determining that
a connection is still "open".
David Daney.
More information about the Java
mailing list