This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: Detecting remote NIO sockets closed
- From: David Daney <ddaney at avtrex dot com>
- To: Stanley Brown <stanley dot brown at zimmer dot com>
- Cc: java at gcc dot gnu dot org
- Date: Fri, 17 Sep 2004 15:55:23 -0700
- Subject: Re: Detecting remote NIO sockets closed
- References: <414B53D9.9070208@zimmer.com>
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.