made _read() non-greedy - it now returns as soon as any amount of data has been read...