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.
This commit is contained in:
R. David Murray 2009-05-31 19:15:57 +00:00
parent d11f7fcc0f
commit 8fcaebbef4
2 changed files with 33 additions and 0 deletions

View File

@ -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)

View File

@ -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()