You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.7 KiB
113 lines
2.7 KiB
cdef str __strerr(int errno): |
|
return strerror(errno).decode() |
|
|
|
|
|
cdef __convert_python_error(int uverr): |
|
# XXX Won't work for Windows: |
|
# From libuv docs: |
|
# Implementation detail: on Unix error codes are the |
|
# negated errno (or -errno), while on Windows they |
|
# are defined by libuv to arbitrary negative numbers. |
|
cdef int oserr = -uverr |
|
|
|
exc = OSError |
|
|
|
if uverr in (uv.UV_EACCES, uv.UV_EPERM): |
|
exc = PermissionError |
|
|
|
elif uverr in (uv.UV_EAGAIN, uv.UV_EALREADY): |
|
exc = BlockingIOError |
|
|
|
elif uverr in (uv.UV_EPIPE, uv.UV_ESHUTDOWN): |
|
exc = BrokenPipeError |
|
|
|
elif uverr == uv.UV_ECONNABORTED: |
|
exc = ConnectionAbortedError |
|
|
|
elif uverr == uv.UV_ECONNREFUSED: |
|
exc = ConnectionRefusedError |
|
|
|
elif uverr == uv.UV_ECONNRESET: |
|
exc = ConnectionResetError |
|
|
|
elif uverr == uv.UV_EEXIST: |
|
exc = FileExistsError |
|
|
|
elif uverr == uv.UV_ENOENT: |
|
exc = FileNotFoundError |
|
|
|
elif uverr == uv.UV_EINTR: |
|
exc = InterruptedError |
|
|
|
elif uverr == uv.UV_EISDIR: |
|
exc = IsADirectoryError |
|
|
|
elif uverr == uv.UV_ESRCH: |
|
exc = ProcessLookupError |
|
|
|
elif uverr == uv.UV_ETIMEDOUT: |
|
exc = TimeoutError |
|
|
|
return exc(oserr, __strerr(oserr)) |
|
|
|
|
|
cdef int __convert_socket_error(int uverr): |
|
cdef int sock_err = 0 |
|
|
|
if uverr == uv.UV_EAI_ADDRFAMILY: |
|
sock_err = socket_EAI_ADDRFAMILY |
|
|
|
elif uverr == uv.UV_EAI_AGAIN: |
|
sock_err = socket_EAI_AGAIN |
|
|
|
elif uverr == uv.UV_EAI_BADFLAGS: |
|
sock_err = socket_EAI_BADFLAGS |
|
|
|
elif uverr == uv.UV_EAI_BADHINTS: |
|
sock_err = socket_EAI_BADHINTS |
|
|
|
elif uverr == uv.UV_EAI_CANCELED: |
|
sock_err = socket_EAI_CANCELED |
|
|
|
elif uverr == uv.UV_EAI_FAIL: |
|
sock_err = socket_EAI_FAIL |
|
|
|
elif uverr == uv.UV_EAI_FAMILY: |
|
sock_err = socket_EAI_FAMILY |
|
|
|
elif uverr == uv.UV_EAI_MEMORY: |
|
sock_err = socket_EAI_MEMORY |
|
|
|
elif uverr == uv.UV_EAI_NODATA: |
|
sock_err = socket_EAI_NODATA |
|
|
|
elif uverr == uv.UV_EAI_NONAME: |
|
sock_err = socket_EAI_NONAME |
|
|
|
elif uverr == uv.UV_EAI_OVERFLOW: |
|
sock_err = socket_EAI_OVERFLOW |
|
|
|
elif uverr == uv.UV_EAI_PROTOCOL: |
|
sock_err = socket_EAI_PROTOCOL |
|
|
|
elif uverr == uv.UV_EAI_SERVICE: |
|
sock_err = socket_EAI_SERVICE |
|
|
|
elif uverr == uv.UV_EAI_SOCKTYPE: |
|
sock_err = socket_EAI_SOCKTYPE |
|
|
|
return sock_err |
|
|
|
|
|
cdef convert_error(int uverr): |
|
cdef int sock_err |
|
|
|
if uverr == uv.UV_ECANCELED: |
|
return aio_CancelledError() |
|
|
|
sock_err = __convert_socket_error(uverr) |
|
if sock_err: |
|
msg = system.gai_strerror(sock_err).decode('utf-8') |
|
return socket_gaierror(sock_err, msg) |
|
|
|
return __convert_python_error(uverr)
|
|
|