--- httplib.py 2014-05-20 14:58:48.334238000 +1200 +++ httplib_fix.py 2014-05-20 14:59:35.170598000 +1200 @@ -69,6 +69,7 @@ Req-sent-unread-response _CS_REQ_S from array import array import os import socket +import errno from sys import py3kwarning from urlparse import urlsplit import warnings @@ -753,16 +754,27 @@ class HTTPConnection: def connect(self): """Connect to the host and port specified in __init__.""" - self.sock = socket.create_connection((self.host,self.port), - self.timeout, self.source_address) + while 1: + try: + self.sock = socket.create_connection((self.host,self.port), + self.timeout, self.source_address) + except socket.error, msg: + if msg.errno == errno.EINTR: + continue + raise + break if self._tunnel_host: self._tunnel() def close(self): """Close the connection to the HTTP server.""" if self.sock: - self.sock.close() # close it manually... there may be other refs + try: + self.sock.close() # close it manually... there may be other refs + except socket.error, msg: + if msg.errno != errno.EINTR: + raise self.sock = None if self.__response: self.__response.close() @@ -1153,8 +1165,15 @@ else: def connect(self): "Connect to a host on a given (SSL) port." - sock = socket.create_connection((self.host, self.port), - self.timeout, self.source_address) + while 1: + try: + sock = socket.create_connection((self.host, self.port), + self.timeout, self.source_address) + except socket.error, msg: + if msg.errno == errno.EINTR: + continue + raise + break if self._tunnel_host: self.sock = sock self._tunnel()