diff -r a7cf5ae137f1 setuptools/package_index.py
--- a/setuptools/package_index.py	Wed Aug 17 03:45:56 2011 -0400
+++ b/setuptools/package_index.py	Thu Aug 18 11:33:00 2011 -0400
@@ -27,6 +27,11 @@
 
 _SOCKET_TIMEOUT = 15
 
+class DistutilsDownloadError(DistutilsError):
+    '''This is a sub-class of DistutilsError that refers to
+    just a download error. Some download errors can be worked around.'''
+    pass
+
 def parse_bdist_wininst(name):
     """Return (base,pyversion) or (None,None) for possible .exe name"""
 
@@ -471,9 +476,15 @@
 
                 if dist in req and (dist.precedence<=SOURCE_DIST or not source):
                     self.info("Best match: %s", dist)
-                    return dist.clone(
-                        location=self.download(dist.location, tmpdir)
-                    )
+                    try:
+                        return dist.clone(
+                            location=self.download(dist.location, tmpdir)
+                        )
+                    except DistutilsDownloadError, e:
+                        self.warn(
+                            "Skipping the 'best match' because "
+                            "it failed to download: %s", e.msg)
+                        continue
 
         if force_scan:
             self.prescan()
@@ -570,7 +581,7 @@
                 url, info = url.split('#', 1)
             fp = self.open_url(url)
             if isinstance(fp, urllib2.HTTPError):
-                raise DistutilsError(
+                raise DownloadError(
                     "Can't download %s: %s %s" % (url, fp.code,fp.msg)
                 )
             cs = md5()
