From 3fac43f89fb08487dc48fffa791d1c205d9710c5 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Giampaolo=20Rodol=C3=A0?= <g.rodola@gmail.com>
Date: Mon, 23 Aug 2010 21:56:11 +0000
Subject: [PATCH] Merged revisions 84284 via svnmerge from
 svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r84284 | giampaolo.rodola | 2010-08-23 23:53:41 +0200 (lun, 23 ago 2010) | 1 line

  fix issue 658749: correctly interprets asyncore's windows errors on connect()
........
---
 Lib/asyncore.py | 6 +++---
 Misc/NEWS       | 3 +++
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index 7b922a98cc..7f06e43e71 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -51,7 +51,7 @@ import socket
 import sys
 import time
 import os
-from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET, \
+from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET, EINVAL, \
      ENOTCONN, ESHUTDOWN, EINTR, EISCONN, EBADF, ECONNABORTED, errorcode
 
 try:
@@ -333,8 +333,8 @@ class dispatcher:
     def connect(self, address):
         self.connected = False
         err = self.socket.connect_ex(address)
-        # XXX Should interpret Winsock return values
-        if err in (EINPROGRESS, EALREADY, EWOULDBLOCK):
+        if err in (EINPROGRESS, EALREADY, EWOULDBLOCK) \
+        or err == EINVAL and os.name in ('nt', 'ce'):
             return
         if err in (0, EISCONN):
             self.addr = address
diff --git a/Misc/NEWS b/Misc/NEWS
index d88a483756..b94623dc7d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -95,6 +95,9 @@ C-API
 Library
 -------
 
+- Issue #658749: asyncore's connect() method now correctly interprets winsock
+  errors.
+
 - Issue #9214: Set operations on KeysView or ItemsView in the collections
   module now correctly return a set.  (Patch by Eli Bendersky.)
 
-- 
2.50.1