Asyncore Windows error handling
- windows behaves somewhat differently when using select
This commit is contained in:
parent
578c5dd495
commit
5895dc2f1f
|
@ -67,9 +67,14 @@ try:
|
||||||
from errno import WSAENOTSOCK
|
from errno import WSAENOTSOCK
|
||||||
except (ImportError, AttributeError):
|
except (ImportError, AttributeError):
|
||||||
WSAENOTSOCK = ENOTSOCK
|
WSAENOTSOCK = ENOTSOCK
|
||||||
|
try:
|
||||||
|
from errno import WSAECONNRESET
|
||||||
|
except (ImportError, AttributeError):
|
||||||
|
WSEACONNRESET = ECONNRESET
|
||||||
|
|
||||||
_DISCONNECTED = frozenset((ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED, EPIPE,
|
_DISCONNECTED = frozenset((ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED, EPIPE,
|
||||||
EBADF, ECONNREFUSED, EHOSTUNREACH, ENETUNREACH, ETIMEDOUT))
|
EBADF, ECONNREFUSED, EHOSTUNREACH, ENETUNREACH, ETIMEDOUT,
|
||||||
|
WSAECONNRESET))
|
||||||
|
|
||||||
OP_READ = 1
|
OP_READ = 1
|
||||||
OP_WRITE = 2
|
OP_WRITE = 2
|
||||||
|
@ -203,7 +208,10 @@ def select_poller(timeout=0.0, map=None):
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
return
|
return
|
||||||
except socket.error as err:
|
except socket.error as err:
|
||||||
if err.args[0] in (EBADF, WSAENOTSOCK, EINTR):
|
if err.args[0] in (EBADF EINTR):
|
||||||
|
return
|
||||||
|
except Exception as err:
|
||||||
|
if err.args[0] in (WSAENOTSOCK, ):
|
||||||
return
|
return
|
||||||
|
|
||||||
for fd in random.sample(r, len(r)):
|
for fd in random.sample(r, len(r)):
|
||||||
|
@ -686,6 +694,9 @@ class dispatcher:
|
||||||
# like we would in a subclassed handle_read() that received no
|
# like we would in a subclassed handle_read() that received no
|
||||||
# data
|
# data
|
||||||
self.handle_close()
|
self.handle_close()
|
||||||
|
elif sys.platform.startswith("win"):
|
||||||
|
# async connect failed
|
||||||
|
self.handle_close()
|
||||||
else:
|
else:
|
||||||
self.handle_expt()
|
self.handle_expt()
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user