diff --git a/scapy/as_resolvers.py b/scapy/as_resolvers.py
index a1f3b7961320a204477151f5e1a2f2ec4cb43900..da4df117e7053a802a974ece6b99a9a8eb2e74a1 100644
--- a/scapy/as_resolvers.py
+++ b/scapy/as_resolvers.py
@@ -8,7 +8,7 @@ Resolve Autonomous Systems (AS).
 """
 
 
-import socket
+import socket, errno
 from scapy.config import conf
 
 class AS_resolver:
@@ -91,12 +91,12 @@ class AS_resolver_cymru(AS_resolver):
             asn,ip,desc = map(str.strip, l.split("|"))
             if asn == "NA":
                 continue
-            asn = int(asn)
-            ASNlist.append((ip,asn,desc))
+            asn = "AS" + str(int(asn))
+            ASNlist.append((ip, asn, desc))
         return ASNlist
 
 class AS_resolver_multi(AS_resolver):
-    resolvers_list = ( AS_resolver_cymru(),AS_resolver_riswhois(),AS_resolver_radb() )
+    resolvers_list = ( AS_resolver_riswhois(),AS_resolver_radb(),AS_resolver_cymru() )
     def __init__(self, *reslist):
         if reslist:
             self.resolvers_list = reslist
@@ -104,10 +104,18 @@ class AS_resolver_multi(AS_resolver):
         todo = ips
         ret = []
         for ASres in self.resolvers_list:
-            res = ASres.resolve(*todo)
+            try:
+                res = ASres.resolve(*todo)
+            except socket.error as e:
+                if e[0] in [errno.ECONNREFUSED, errno.ETIMEDOUT, errno.ECONNRESET]:
+                    continue
             resolved = [ ip for ip,asn,desc in res ]
             todo = [ ip for ip in todo if ip not in resolved ]
             ret += res
+            if len(todo) == 0:
+                break
+        if len(ips) != len(ret):
+            raise RuntimeError("Could not contact whois providers")
         return ret
 
 
diff --git a/test/regression.uts b/test/regression.uts
index d53fe23e1384ce4e60c408ff3bf577add160c33e..a432d7500bb976d28301332f60be02682d5277b1 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -481,7 +481,7 @@ success = False
 for i in xrange(5):
     try:
         ret = conf.AS_resolver.resolve("8.8.8.8", "8.8.4.4")
-    except socket.error:
+    except RuntimeError:
         time.sleep(2)
     else:
         success = True
@@ -489,7 +489,7 @@ for i in xrange(5):
 
 assert (len(ret) == 2)
 
-all(x[1] == 15169 for x in ret)
+all(x[1] == "AS15169" for x in ret)
 
 
 ############