Issue #23485: select.poll.poll() is now retried when interrupted by a signal
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index 5578dda..3b51f0f 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -179,10 +179,8 @@
                 flags |= select.POLLOUT
             if flags:
                 pollster.register(fd, flags)
-        try:
-            r = pollster.poll(timeout)
-        except InterruptedError:
-            r = []
+
+        r = pollster.poll(timeout)
         for fd, flags in r:
             obj = map.get(fd)
             if obj is None:
diff --git a/Lib/selectors.py b/Lib/selectors.py
index 4f2a377..bf48ebf 100644
--- a/Lib/selectors.py
+++ b/Lib/selectors.py
@@ -359,11 +359,10 @@
                 # poll() has a resolution of 1 millisecond, round away from
                 # zero to wait *at least* timeout seconds.
                 timeout = math.ceil(timeout * 1e3)
+
+            fd_event_list = self._poll.poll(timeout)
+
             ready = []
-            try:
-                fd_event_list = self._poll.poll(timeout)
-            except InterruptedError:
-                return ready
             for fd, event in fd_event_list:
                 events = 0
                 if event & ~select.POLLIN:
diff --git a/Lib/test/eintrdata/eintr_tester.py b/Lib/test/eintrdata/eintr_tester.py
index 82cef83..3da964d 100644
--- a/Lib/test/eintrdata/eintr_tester.py
+++ b/Lib/test/eintrdata/eintr_tester.py
@@ -38,8 +38,12 @@
                          cls.signal_period)
 
     @classmethod
-    def tearDownClass(cls):
+    def stop_alarm(cls):
         signal.setitimer(signal.ITIMER_REAL, 0, 0)
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.stop_alarm()
         signal.signal(signal.SIGALRM, cls.orig_handler)
 
     @classmethod
@@ -260,7 +264,7 @@
     def test_sleep(self):
         t0 = time.monotonic()
         time.sleep(self.sleep_time)
-        signal.alarm(0)
+        self.stop_alarm()
         dt = time.monotonic() - t0
         self.assertGreaterEqual(dt, self.sleep_time)
 
@@ -311,7 +315,17 @@
     def test_select(self):
         t0 = time.monotonic()
         select.select([], [], [], self.sleep_time)
-        signal.alarm(0)
+        self.stop_alarm()
+        dt = time.monotonic() - t0
+        self.assertGreaterEqual(dt, self.sleep_time)
+
+    @unittest.skipUnless(hasattr(select, 'poll'), 'need select.poll')
+    def test_poll(self):
+        poller = select.poll()
+
+        t0 = time.monotonic()
+        poller.poll(self.sleep_time * 1e3)
+        self.stop_alarm()
         dt = time.monotonic() - t0
         self.assertGreaterEqual(dt, self.sleep_time)