diff options
author | Ross <rrhodes@users.noreply.github.com> | 2021-01-01 17:20:25 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-02 02:20:25 +0900 |
commit | 3bf05327c2b25d42b92795d9d280288c22a0963d (patch) | |
tree | 608f0d4a616d760f154d4a8a73e837e5fc92fb30 | |
parent | de6f20a6de48d63066b2cf5b317f50629f01d74a (diff) | |
download | cpython-git-3bf05327c2b25d42b92795d9d280288c22a0963d.tar.gz |
bpo-42756: Configure LMTP Unix-domain socket to use global default timeout when timeout not provided (GH-23969)
-rwxr-xr-x | Lib/smtplib.py | 3 | ||||
-rw-r--r-- | Lib/test/mock_socket.py | 7 | ||||
-rw-r--r-- | Lib/test/test_smtplib.py | 11 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-12-27-21-22-01.bpo-42756.dHMPJ9.rst | 2 |
4 files changed, 22 insertions, 1 deletions
diff --git a/Lib/smtplib.py b/Lib/smtplib.py index e2dbbbcf2e..e81a9f05d6 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -1082,7 +1082,8 @@ class LMTP(SMTP): # Handle Unix-domain sockets. try: self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - self.sock.settimeout(self.timeout) + if self.timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: + self.sock.settimeout(self.timeout) self.file = None self.sock.connect(host) except OSError: diff --git a/Lib/test/mock_socket.py b/Lib/test/mock_socket.py index cda4db25cb..c7abddcf5f 100644 --- a/Lib/test/mock_socket.py +++ b/Lib/test/mock_socket.py @@ -107,6 +107,9 @@ class MockSocket: def close(self): pass + def connect(self, host): + pass + def socket(family=None, type=None, proto=None): return MockSocket(family) @@ -152,8 +155,12 @@ error = socket_module.error # Constants +_GLOBAL_DEFAULT_TIMEOUT = socket_module._GLOBAL_DEFAULT_TIMEOUT AF_INET = socket_module.AF_INET AF_INET6 = socket_module.AF_INET6 SOCK_STREAM = socket_module.SOCK_STREAM SOL_SOCKET = None SO_REUSEADDR = None + +if hasattr(socket_module, 'AF_UNIX'): + AF_UNIX = socket_module.AF_UNIX diff --git a/Lib/test/test_smtplib.py b/Lib/test/test_smtplib.py index 91985384ec..1ad45d8c78 100644 --- a/Lib/test/test_smtplib.py +++ b/Lib/test/test_smtplib.py @@ -165,6 +165,17 @@ class LMTPGeneralTests(GeneralTests, unittest.TestCase): client = smtplib.LMTP + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), "test requires Unix domain socket") + def testUnixDomainSocketTimeoutDefault(self): + local_host = '/some/local/lmtp/delivery/program' + mock_socket.reply_with(b"220 Hello world") + try: + client = self.client(local_host, self.port) + finally: + mock_socket.setdefaulttimeout(None) + self.assertIsNone(client.sock.gettimeout()) + client.close() + def testTimeoutZero(self): super().testTimeoutZero() local_host = '/some/local/lmtp/delivery/program' diff --git a/Misc/NEWS.d/next/Library/2020-12-27-21-22-01.bpo-42756.dHMPJ9.rst b/Misc/NEWS.d/next/Library/2020-12-27-21-22-01.bpo-42756.dHMPJ9.rst new file mode 100644 index 0000000000..93a0bb010d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-12-27-21-22-01.bpo-42756.dHMPJ9.rst @@ -0,0 +1,2 @@ +Configure LMTP Unix-domain socket to use socket global default timeout when +a timeout is not explicitly provided. |