using half the lines is just preference - but I think this is broken if you don't tab these out! It's a subtle bug because the sockets that are ready to read will just come up again in the next loop.