From: R. David Murray Date: Sun, 31 May 2009 19:15:57 +0000 (+0000) Subject: Issue 3848: document the fact that epoll register raises an IOError if X-Git-Tag: v2.7a1~1055 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8fcaebbef48f411e71e64bce32c40d8cb810fe23;p=python Issue 3848: document the fact that epoll register raises an IOError if an fd is registered twice, and add some additional epoll tests. Patch by Christian Heimes. --- diff --git a/Doc/library/select.rst b/Doc/library/select.rst index 1300f23e86..351ecfa2be 100644 --- a/Doc/library/select.rst +++ b/Doc/library/select.rst @@ -160,6 +160,11 @@ Edge and Level Trigger Polling (epoll) Objects Register a fd descriptor with the epoll object. + .. note:: + + Registering a file descriptor that's already registered raises an + IOError -- contrary to :ref:`poll-objects`'s register. + .. method:: epoll.modify(fd, eventmask) diff --git a/Lib/test/test_epoll.py b/Lib/test/test_epoll.py index 2362ad5072..15c9869335 100644 --- a/Lib/test/test_epoll.py +++ b/Lib/test/test_epoll.py @@ -95,6 +95,34 @@ class TestEPoll(unittest.TestCase): finally: ep.close() + # adding by object w/ fileno works, too. + ep = select.epoll(2) + try: + ep.register(server, select.EPOLLIN | select.EPOLLOUT) + ep.register(client, select.EPOLLIN | select.EPOLLOUT) + finally: + ep.close() + + ep = select.epoll(2) + try: + # TypeError: argument must be an int, or have a fileno() method. + self.assertRaises(TypeError, ep.register, object(), + select.EPOLLIN | select.EPOLLOUT) + self.assertRaises(TypeError, ep.register, None, + select.EPOLLIN | select.EPOLLOUT) + # ValueError: file descriptor cannot be a negative integer (-1) + self.assertRaises(ValueError, ep.register, -1, + select.EPOLLIN | select.EPOLLOUT) + # IOError: [Errno 9] Bad file descriptor + self.assertRaises(IOError, ep.register, 10000, + select.EPOLLIN | select.EPOLLOUT) + # registering twice also raises an exception + ep.register(server, select.EPOLLIN | select.EPOLLOUT) + self.assertRaises(IOError, ep.register, server, + select.EPOLLIN | select.EPOLLOUT) + finally: + ep.close() + def test_fromfd(self): server, client = self._connected_pair()