[Python-checkins] bpo-45328: Avoid failure in OSs without TCP_NODELAY support (GH-28646)

ambv webhook-mailer at python.org
Wed Oct 6 13:49:48 EDT 2021


https://github.com/python/cpython/commit/0571b934f5f9198c3461a7b631d7073ac0a5676f
commit: 0571b934f5f9198c3461a7b631d7073ac0a5676f
branch: main
author: rtobar <rtobarc at gmail.com>
committer: ambv <lukasz at langa.pl>
date: 2021-10-06T19:49:44+02:00
summary:

bpo-45328: Avoid failure in OSs without TCP_NODELAY support (GH-28646)

Operating systems without support for TCP_NODELAY will raise an OSError
when trying to set the socket option, but the show can still go on.

files:
A Misc/NEWS.d/next/Library/2021-09-30-08-22-44.bpo-45328.8Z-Q0B.rst
M Lib/http/client.py

diff --git a/Lib/http/client.py b/Lib/http/client.py
index 08cf2ed9b3716..a6ab135b2c387 100644
--- a/Lib/http/client.py
+++ b/Lib/http/client.py
@@ -70,6 +70,7 @@
 
 import email.parser
 import email.message
+import errno
 import http
 import io
 import re
@@ -939,7 +940,12 @@ def connect(self):
         sys.audit("http.client.connect", self, self.host, self.port)
         self.sock = self._create_connection(
             (self.host,self.port), self.timeout, self.source_address)
-        self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+        # Might fail in OSs that don't implement TCP_NODELAY
+        try:
+             self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+        except OSError as e:
+            if e.errno != errno.ENOPROTOOPT:
+                raise
 
         if self._tunnel_host:
             self._tunnel()
diff --git a/Misc/NEWS.d/next/Library/2021-09-30-08-22-44.bpo-45328.8Z-Q0B.rst b/Misc/NEWS.d/next/Library/2021-09-30-08-22-44.bpo-45328.8Z-Q0B.rst
new file mode 100644
index 0000000000000..eeb49310e8f66
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-09-30-08-22-44.bpo-45328.8Z-Q0B.rst
@@ -0,0 +1 @@
+Fixed :class:`http.client.HTTPConnection` to work properly in OSs that don't support the ``TCP_NODELAY`` socket option.



More information about the Python-checkins mailing list