Must return io.EOF to allow io.Copy to function correctly

When using io.Copy, a call to `Read(b []byte)` must return `io.EOF` when reaching the end of the file. Without this change, io.Copy loops forever reading 0 bytes.