mirror of
https://github.com/python/cpython.git
synced 2025-08-02 08:02:56 +00:00
bpo-45328: Avoid failure in OSs without TCP_NODELAY support (GH-28646) (GH-28771)
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 0571b934f5
)
Co-authored-by: rtobar <rtobarc@gmail.com>
This commit is contained in:
parent
dcdeb96495
commit
4c35a2aa80
2 changed files with 8 additions and 1 deletions
|
@ -70,6 +70,7 @@ Req-sent-unread-response _CS_REQ_SENT <response_class>
|
||||||
|
|
||||||
import email.parser
|
import email.parser
|
||||||
import email.message
|
import email.message
|
||||||
|
import errno
|
||||||
import http
|
import http
|
||||||
import io
|
import io
|
||||||
import re
|
import re
|
||||||
|
@ -939,7 +940,12 @@ class HTTPConnection:
|
||||||
sys.audit("http.client.connect", self, self.host, self.port)
|
sys.audit("http.client.connect", self, self.host, self.port)
|
||||||
self.sock = self._create_connection(
|
self.sock = self._create_connection(
|
||||||
(self.host,self.port), self.timeout, self.source_address)
|
(self.host,self.port), self.timeout, self.source_address)
|
||||||
|
# Might fail in OSs that don't implement TCP_NODELAY
|
||||||
|
try:
|
||||||
self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
||||||
|
except OSError as e:
|
||||||
|
if e.errno != errno.ENOPROTOOPT:
|
||||||
|
raise
|
||||||
|
|
||||||
if self._tunnel_host:
|
if self._tunnel_host:
|
||||||
self._tunnel()
|
self._tunnel()
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fixed :class:`http.client.HTTPConnection` to work properly in OSs that don't support the ``TCP_NODELAY`` socket option.
|
Loading…
Add table
Add a link
Reference in a new issue