summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoss <rrhodes@users.noreply.github.com>2021-01-02 03:44:04 (GMT)
committerGitHub <noreply@github.com>2021-01-02 03:44:04 (GMT)
commit69120613c071e9327a9dc6e4b1ff21b2e94d885e (patch)
treef36f2a002f86094282face97e076a1ffed3b3f8a
parent0d6e40744ae40ff397883ff90ca235efd3b63f18 (diff)
downloadcpython-69120613c071e9327a9dc6e4b1ff21b2e94d885e.zip
cpython-69120613c071e9327a9dc6e4b1ff21b2e94d885e.tar.gz
cpython-69120613c071e9327a9dc6e4b1ff21b2e94d885e.tar.bz2
[3.9] bpo-42756: Configure LMTP Unix-domain socket to use global default timeout when timeout not provided (GH-23969) (GH-24050)
-rwxr-xr-xLib/smtplib.py3
-rw-r--r--Lib/test/mock_socket.py7
-rw-r--r--Lib/test/test_smtplib.py11
-rw-r--r--Misc/NEWS.d/next/Library/2020-12-27-21-22-01.bpo-42756.dHMPJ9.rst2
4 files changed, 22 insertions, 1 deletions
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index 7808ba0..f047231 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 cda4db2..c7abddc 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 5762999..3451f3a 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 0000000..93a0bb0
--- /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.