summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2021-10-06 18:29:41 (GMT)
committerGitHub <noreply@github.com>2021-10-06 18:29:41 (GMT)
commit92018a08240308c5beef9ccc712bef5c2e582926 (patch)
tree597b4a67b0e37aa219eafb581fab350b7d5d8c86
parent496d1aa0b84466cc9b11f4f3b90cee93af1f393e (diff)
downloadcpython-92018a08240308c5beef9ccc712bef5c2e582926.zip
cpython-92018a08240308c5beef9ccc712bef5c2e582926.tar.gz
cpython-92018a08240308c5beef9ccc712bef5c2e582926.tar.bz2
bpo-45328: Avoid failure in OSs without TCP_NODELAY support (GH-28646) (GH-28770)
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. (cherry picked from commit 0571b934f5f9198c3461a7b631d7073ac0a5676f) Co-authored-by: rtobar <rtobarc@gmail.com>
-rw-r--r--Lib/http/client.py8
-rw-r--r--Misc/NEWS.d/next/Library/2021-09-30-08-22-44.bpo-45328.8Z-Q0B.rst1
2 files changed, 8 insertions, 1 deletions
diff --git a/Lib/http/client.py b/Lib/http/client.py
index 0fd9021..a98432e 100644
--- a/Lib/http/client.py
+++ b/Lib/http/client.py
@@ -70,6 +70,7 @@ Req-sent-unread-response _CS_REQ_SENT <response_class>
import email.parser
import email.message
+import errno
import http
import io
import re
@@ -944,7 +945,12 @@ class HTTPConnection:
"""Connect to the host and port specified in __init__."""
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 0000000..eeb4931
--- /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.