Did you add a timeout to your sockets?
If the remote end of a socket *silently* disconnects, your local socket will block indefinitely on a read(...) - a write(...) however will throw an IOException and force the read(...) out of blocking.
So to prevent these runaway sockets, add a timeout.
[Message sent by forum member 'riven' (riven)]
http://forums.java.net/jive/thread.jspa?messageID=315008