diff --git a/read.c b/read.c
index 3ddd2049f844f2f41726f3f6ddaaedb68700c804..d50fb5e92291b03090bdbbf7b50855e2104f89f1 100644
--- a/read.c
+++ b/read.c
@@ -342,6 +342,7 @@ static void *on_process(oop_source *oop, oop_read *rd, int try_read) {
     want= MIN(dataspace, readahead);
     assert(rd->used < want);
 
+    errno= 0;
     nread= rd->ra->try_read(rd->ra, buf+rd->used, want-rd->used);
     if (errno == EAGAIN) return OOP_CONTINUE;