in reply to Threaded sockets, etc.
When I timeout, I disconnect and reconnect before I try doing another select. Most of the protocols I use involve heartbeats, so if I haven't received a response in a certain amount of time, it generally means there's a problem with the other side.
You might want to try the same.