[FIX] possibility of select being interrupted, just restart the call

uses EnvironmentError because not sure if socket.error or os.error
[IMP] style

use break instead of return so cleanup can eventually be put after loop if necessary (?)