diff --git a/Lib/asyncore.py b/Lib/asyncore.py index 3e3907eee86..c23c8aa3fe4 100644 --- a/Lib/asyncore.py +++ b/Lib/asyncore.py @@ -607,6 +607,14 @@ if os.name == 'posix': 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 diff --git a/Lib/test/test_asyncore.py b/Lib/test/test_asyncore.py index c352c396b6e..62173340299 100644 --- a/Lib/test/test_asyncore.py +++ b/Lib/test/test_asyncore.py @@ -428,6 +428,19 @@ class FileWrapperTest(unittest.TestCase): w.close() self.assertEqual(file(TESTFN).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) + class BaseTestHandler(asyncore.dispatcher): diff --git a/Misc/ACKS b/Misc/ACKS index c75fced81e7..08b26c8c9a9 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -438,8 +438,8 @@ Ivan Krstić Andrew Kuchling Vladimir Kushnir Cameron Laird -Tino Lange Łukasz Langa +Tino Lange Andrew Langmead Detlef Lannert Soren Larsen diff --git a/Misc/NEWS b/Misc/NEWS index 175e11711b9..29b777a008b 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -24,6 +24,8 @@ Core and Builtins Library ------- +- Issue #9354: Provide getsockopt() in asyncore's file_wrapper. + - Issue #4108: In urllib.robotparser, if there are multiple 'User-agent: *' entries, consider the first one. @@ -951,6 +953,7 @@ Core and Builtins Library ------- + - Issue #1555570: email no longer inserts extra blank lines when a \r\n combo crosses an 8192 byte boundary.