client.read loop