Question:
Is there any way to test if a socket is still open without writing to it?
Answer:
Despite being relatively easy to use, the Socket class is not implemented as well as it might have been. Connections are established at the time the Socket is created, so there is no way to reuse a Socket object after it has been closed.
Nonblocking I/O is not possible, and only a limited number of socket options are available. Among other things, there is no way to test if a socket is still open, the way you can with native function calls.
The only ways you can tell if a socket has been closed are if you read from its input stream and encounter and end-of-file condition (a return value of -1) or an “IOException,” or if you write to its output stream and encounter an “IOException.”