Fix Issue 6706: return None on connect() in case of EWOULDBLOCK/ECONNABORTED error.
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index 7f06e43..861495d 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -346,12 +346,15 @@
         # XXX can return either an address pair or None
         try:
             conn, addr = self.socket.accept()
-            return conn, addr
+        except TypeError:
+            return None
         except socket.error as why:
-            if why.args[0] == EWOULDBLOCK:
-                pass
+            if why.args[0] in (EWOULDBLOCK, ECONNABORTED):
+                return None
             else:
                 raise
+        else:
+            return conn, addr
 
     def send(self, data):
         try:
diff --git a/Lib/smtpd.py b/Lib/smtpd.py
index 57ad089..ab3e0e2 100755
--- a/Lib/smtpd.py
+++ b/Lib/smtpd.py
@@ -297,22 +297,11 @@
                 localaddr, remoteaddr), file=DEBUGSTREAM)
 
     def handle_accept(self):
-        try:
-            conn, addr = self.accept()
-        except TypeError:
-            # sometimes accept() might return None
-            return
-        except socket.error as err:
-            # ECONNABORTED might be thrown
-            if err.args[0] != errno.ECONNABORTED:
-                raise
-            return
-        else:
-            # sometimes addr == None instead of (ip, port)
-            if addr == None:
-                return
-        print('Incoming connection from %s' % repr(addr), file=DEBUGSTREAM)
-        channel = SMTPChannel(self, conn, addr)
+        pair = self.accept()
+        if pair is not None:
+            conn, addr = pair
+            print('Incoming connection from %s' % repr(addr), file=DEBUGSTREAM)
+            channel = SMTPChannel(self, conn, addr)
 
     # API for "doing something useful with the message"
     def process_message(self, peer, mailfrom, rcpttos, data):