Socket's close() doesn't close connection (old bug?)

David Daney ddaney@avtrex.com
Wed Nov 9 19:37:00 GMT 2005


Martin Egholm Nielsen wrote:
> Hi Daney,
>>>>> In my eager to reproduce another bug I've stumbled across yet 
>>>> another strange issue - namely that Socket's close() doesn't close 
>>>> underlying socket (with no traffic), nor "wake up" a blocked 
>>>> read-thread (as a consequence)...
>>>>>>>>>>>> Blah blah blah, this turned out to be reported already:
>>>>>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15430
>>>>>> Unfortunately still open ;-)
>>>> Check the above PR for my little C program the demonstrates how by 
>> adding a call to shutdown() before the close() that the blocked read() 
>> returns. I think with a small amount of hacking we can use this 
>> technique to terminate the blocked thread with the proper exception 
>> being thrown.
>> Really?! Reading here:
>> http://www.ecst.csuchico.edu/~beej/guide/net_old/#closedown
>> shutdown(s, SHUT_RDWR);
>> and
>> close(s);
>> are identical...
>
They are not identical. shutdown() closes the socket. close() 
disconnects a process from the socket allowing the OS to close it when 
there are no more references to it. If a thread is blocked reading from 
the socket there will be a reference to it as long as it is blocked.
David Daney.


More information about the Java mailing list

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