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.