diff -r dd21f8ef033a Lib/selectors.py --- a/Lib/selectors.py Sun Dec 07 17:26:43 2014 -0500 +++ b/Lib/selectors.py Mon Dec 08 10:41:24 2014 -0500 @@ -418,7 +418,7 @@ # epoll_wait() has a resolution of 1 millisecond, round away # from zero to wait *at least* timeout seconds. timeout = math.ceil(timeout * 1e3) * 1e-3 - max_ev = len(self._fd_to_key) + max_ev = max(len(self._fd_to_key), 1) ready = [] try: fd_event_list = self._epoll.poll(timeout, max_ev) diff -r dd21f8ef033a Lib/test/test_selectors.py --- a/Lib/test/test_selectors.py Sun Dec 07 17:26:43 2014 -0500 +++ b/Lib/test/test_selectors.py Mon Dec 08 10:41:24 2014 -0500 @@ -316,6 +316,11 @@ self.assertEqual(bufs, [MSG] * NUM_SOCKETS) + def test_empty_select(self): + s = self.SELECTOR() + self.addCleanup(s.close) + s.select(timeout=0) + def test_timeout(self): s = self.SELECTOR() self.addCleanup(s.close)