diff --git a/Lib/asyncore.py b/Lib/asyncore.py index c3b9d769549..083920c3893 100644 --- a/Lib/asyncore.py +++ b/Lib/asyncore.py @@ -53,7 +53,7 @@ import time import warnings 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: @@ -337,8 +337,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 ed9c1924811..fe9be716035 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -31,6 +31,9 @@ Core and Builtins Library ------- +- Issue #658749: asyncore's connect() method now correctly interprets winsock + errors. + - Issue #9501: Fixed logging regressions in cleanup code. - Issue #9214: Set operations on KeysView or ItemsView in the collections