diff --git a/unix/moduselect.c b/unix/moduselect.c
index 76938329fcd10965eef8cc6b5b66e11baf600656..37a3a33b28a5d2d8f1c01eec4705630ba6a35ce5 100644
--- a/unix/moduselect.c
+++ b/unix/moduselect.c
@@ -253,8 +253,9 @@ STATIC mp_obj_t poll_iternext(mp_obj_t self_in) {
 
     self->iter_cnt--;
 
-    struct pollfd *entries = self->entries;
+    struct pollfd *entries = self->entries + self->iter_idx;
     for (int i = self->iter_idx; i < self->len; i++, entries++) {
+        self->iter_idx++;
         if (entries->revents != 0) {
             mp_obj_tuple_t *t = MP_OBJ_TO_PTR(self->ret_tuple);
             // If there's an object stored, return it, otherwise raw fd