def send(self, *args):
return os.write(self.fd, *args)
+ def getsockopt(self, level, optname, buflen=None):
+ if (level == socket.SOL_SOCKET and
+ optname == socket.SO_ERROR and
+ not buflen):
+ return 0
+ raise NotImplementedError("Only asyncore specific behaviour "
+ "implemented.")
+
read = recv
write = send
w.close()
self.assertEqual(open(TESTFN, 'rb').read(), self.d + d1 + d2)
+ @unittest.skipUnless(hasattr(asyncore, 'file_dispatcher'),
+ ' asyncore.file_dispatcher required')
+ def test_dispatcher(self):
+ fd = os.open(TESTFN, os.O_RDONLY)
+ data = []
+ class FileDispatcher(asyncore.file_dispatcher):
+ def handle_read(self):
+ data.append(self.recv(29))
+ s = FileDispatcher(fd)
+ os.close(fd)
+ asyncore.loop(timeout=0.01, use_poll=True, count=2)
+ self.assertEqual(b"".join(data), self.d)
+
def test_main():
tests = [HelperFunctionTests, DispatcherTests, DispatcherWithSendTests,
- Issue #1690103: Fix initial namespace for code run with trace.main().
+- Issue #9354: Provide getsockopt() in asyncore's file_wrapper.
+
- Issue #9448: Fix a leak of OS resources (mutexes or semaphores) when
re-initializing a buffered IO object by calling its ``__init__`` method.