Fixes issue 126. IPv6 under various conditions would fail.
diff --git a/python2/httplib2/__init__.py b/python2/httplib2/__init__.py
index c87010c..05cb5cf 100644
--- a/python2/httplib2/__init__.py
+++ b/python2/httplib2/__init__.py
@@ -768,17 +768,33 @@
     def connect(self):
         "Connect to a host on a given (SSL) port."
 
-        if self.proxy_info and self.proxy_info.isgood():
-            sock = socks.socksocket(socket.AF_INET, socket.SOCK_STREAM)
-            sock.setproxy(*self.proxy_info.astuple())
-        else:
-            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-            sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+        msg = "getaddrinfo returns an empty list"
+        for family, socktype, proto, canonname, sockaddr in socket.getaddrinfo(
+            self.host, self.port, 0, socket.SOCK_STREAM):
+            try:
+                if self.proxy_info and self.proxy_info.isgood():
+                    sock = socks.socksocket(family, socktype, proto)
+                    sock.setproxy(*self.proxy_info.astuple())
+                else:
+                    sock = socket.socket(family, socktype, proto)
+                    sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
 
-        if has_timeout(self.timeout):
-            sock.settimeout(self.timeout)
-        sock.connect((self.host, self.port))
-        self.sock =_ssl_wrap_socket(sock, self.key_file, self.cert_file)
+                if has_timeout(self.timeout):
+                    sock.settimeout(self.timeout)
+                sock.connect((self.host, self.port))
+                self.sock =_ssl_wrap_socket(sock, self.key_file, self.cert_file)
+                if self.debuglevel > 0:
+                    print "connect: (%s, %s)" % (self.host, self.port)
+            except socket.error, msg:
+              if self.debuglevel > 0:
+                  print 'connect fail:', (self.host, self.port)
+              if self.sock:
+                  self.sock.close()
+              self.sock = None
+              continue
+            break
+        if not self.sock:
+          raise socket.error, msg
 
 
 
diff --git a/python2/httplib2test.py b/python2/httplib2test.py
index 50222f2..1c5c49f 100755
--- a/python2/httplib2test.py
+++ b/python2/httplib2test.py
@@ -145,6 +145,24 @@
         self.http = httplib2.Http(cacheDirName)
         self.http.clear_credentials()
 
+    def testIPv6NoSSL(self):
+        try:
+          self.http.request("http://[::1]/")
+        except socket.gaierror:
+          self.fail("should get the address family right for IPv6")
+        except socket.error:
+          # Even if IPv6 isn't installed on a machine it should just raise socket.error
+          pass
+
+    def testIPv6SSL(self):
+        try:
+          self.http.request("https://[::1]/")
+        except socket.gaierror:
+          self.fail("should get the address family right for IPv6")
+        except socket.error:
+          # Even if IPv6 isn't installed on a machine it should just raise socket.error
+          pass
+
     def testConnectionType(self):
         self.http.force_exception_to_status_code = False 
         response, content = self.http.request("http://bitworking.org", connection_type=_MyHTTPConnection)