Index: Doc/library/select.rst =================================================================== --- Doc/library/select.rst (Revision 66409) +++ Doc/library/select.rst (Arbeitskopie) @@ -158,9 +158,14 @@ .. method:: epoll.register(fd[, eventmask]) - Register a fd descriptor with the epoll object. + 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) Modify a register file descriptor. Index: Lib/test/test_epoll.py =================================================================== --- Lib/test/test_epoll.py (Revision 66408) +++ Lib/test/test_epoll.py (Arbeitskopie) @@ -95,6 +95,34 @@ 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()