--- orig_asyncore.py 2010-09-15 22:18:21.000000000 +0600 +++ asyncore.py 2011-02-21 10:15:18.132551584 +0500 @@ -53,7 +53,8 @@ import os from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET, \ - ENOTCONN, ESHUTDOWN, EINTR, EISCONN, EBADF, ECONNABORTED, errorcode + ENOTCONN, ESHUTDOWN, EINTR, EISCONN, EBADF, ECONNABORTED, \ + EAGAIN, errorcode try: socket_map @@ -336,7 +337,7 @@ 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, EAGAIN): return if err in (0, EISCONN): self.addr = address @@ -350,7 +351,7 @@ conn, addr = self.socket.accept() return conn, addr except socket.error, why: - if why.args[0] == EWOULDBLOCK: + if why.args[0] in (EWOULDBLOCK, EAGAIN): pass else: raise @@ -360,7 +361,7 @@ result = self.socket.send(data) return result except socket.error, why: - if why.args[0] == EWOULDBLOCK: + if why.args[0] in (EWOULDBLOCK, EAGAIN): return 0 elif why.args[0] in (ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED): self.handle_close() @@ -380,7 +381,7 @@ return data except socket.error, why: # winsock sometimes throws ENOTCONN - if why.args[0] in [ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED]: + if why.args[0] in (ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED): self.handle_close() return '' else: