Making sure to check selects return value and raise on sync

This patch is an attempt at failing hard on read timeouts for sync clients.

## Why?

The current implementation never checks the return value of ```select``` that means there is no way of knowing if we actually got data or select reached timeout before data was actually available.

I chose to just raise on timeout since that seems to be what a noeqd client wants, fail hard as soon as possible, so the client app can failover to a new noeqd server. instead of dealing with a possibly problematic server.