Bug in java.net.Socket close() behavior?
Joseph Gleason
fireduck at gmail.com
Mon Oct 16 10:24:12 PDT 2006
According to the API for java.net.Socket close():
"Any thread currently blocked in an I/O operation upon this socket
will throw a SocketException."
http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html#close()
I have observed that java 1.5 on FreeBSD does not follow this while
the Windows and Linux ones I have tested do. On the FreeBSD runtimes
that I have tested, a thread blocked on reading a socket just hangs
forever if the socket is closed.
Attached is a simple program that tests this behavior. It just
connects to a port on one of my servers and has a reader thread
watching input from the socket and closes the socket in a different
thread to see if the reader thread gets an exception.
Java runtimes that I have tested this on:
# java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build diablo-1.5.0-b01)
Java HotSpot(TM) 64-Bit Server VM (build diablo-1.5.0_07-b01, mixed mode)
# java -version
java version "1.5.0-p2"
Java(TM) 2 Runtime Environment, Standard Edition (build
1.5.0-p2-root_07_mar_2006_02_41)
Java HotSpot(TM) 64-Bit Server VM (build
1.5.0-p2-root_07_mar_2006_02_41, mixed mode)
More information about the freebsd-java
mailing list