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

AltStyle によって変換されたページ (->オリジナル) /