def set_socket_timeout(self, timeout):
     """Set the timeout seconds on the socket."""
     # The problem we're trying to solve is to prevent .read() calls from
     # hanging.  This can happen in rare cases.  What we'd like to ideally
     # do is set a timeout on the .read() call so that callers can retry
     # the request.
     # Unfortunately, this isn't currently possible in requests.
     # See: https://github.com/kennethreitz/requests/issues/1803
     # So what we're going to do is reach into the guts of the stream and
     # grab the socket object, which we can set the timeout on.  We're
     # putting in a check here so in case this interface goes away, we'll
     # know.
     try:
         # To further complicate things, the way to grab the
         # underlying socket object from an HTTPResponse is different
         # in py2 and py3.  So this code has been pushed to botocore.compat.
         set_socket_timeout(self._raw_stream, timeout)
     except AttributeError:
         logger.error(
             "Cannot access the socket object of "
             "a streaming response.  It's possible "
             "the interface has changed.",
             exc_info=True,
         )
         raise
Exemple #2
0
 def set_socket_timeout(self, timeout):
     """Set the timeout seconds on the socket."""
     # The problem we're trying to solve is to prevent .read() calls from
     # hanging.  This can happen in rare cases.  What we'd like to ideally
     # do is set a timeout on the .read() call so that callers can retry
     # the request.
     # Unfortunately, this isn't currently possible in requests.
     # See: https://github.com/kennethreitz/requests/issues/1803
     # So what we're going to do is reach into the guts of the stream and
     # grab the socket object, which we can set the timeout on.  We're
     # putting in a check here so in case this interface goes away, we'll
     # know.
     try:
         # To further complicate things, the way to grab the
         # underlying socket object from an HTTPResponse is different
         # in py2 and py3.  So this code has been pushed to botocore.compat.
         set_socket_timeout(self._raw_stream, timeout)
     except AttributeError:
         logger.error("Cannot access the socket object of "
                      "a streaming response.  It's possible "
                      "the interface has changed.", exc_info=True)
         raise