I didn't see socket.closeInput(). However, I did find socket.shutdownInput(). After calling that (from a different thread that was blocking on the read naturally), my call to bufferedReader.close() worked fine! (I followed that with calls to printWriter.close() and socket.close().