issue with ServerSocket::accept

David Daney ddaney@avtrex.com
Fri May 14 18:37:00 GMT 2004


David Daney wrote:

> Bryce McKinlay wrote:
>
>> Vladimir Leven wrote:
>>
>>> Oops. It does seem to block -- my mistake. But there is still a 
>>> problem. When I close the serverSocket, java generates a 
>>> SocketException, but gcj does not appear to do so.
>>
>>
>>
>>
>> Looks like we don't implement blocking I/O interruption with 
>> close().  I've set up a bug report to track this issue, with a 
>> self-contained test case:
>>
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15430
>>
>> Does anyone know of a good way to implement this? Can select() do it?
>>
>
> I haven't gone through the exercise, but what does accept(2) do when 
> close(2) is called on the socket from another thread?
>
> Intuition tells me that something will happen on the thread that 
> called accept().  Perhaps accept returns -1.  If this is the case you 
> could check to see if the socket was closed and throw the exception.
>
Well maybe accept doesn't return when the socket is closed.  Perhaps 
each thread entering ServerSocket.accept() should put itself on a list 
of blocked acceptors.  Then when close() is called each thread on the 
list is interrupted...

David Daney.




More information about the Java mailing list