diff options
| author | Sergey Shepelev <temotor@gmail.com> | 2015-02-13 00:27:22 +0300 |
|---|---|---|
| committer | Sergey Shepelev <temotor@gmail.com> | 2015-02-13 00:27:22 +0300 |
| commit | 411827efc6357afd99a44d7e0d9b5f922c6e8c23 (patch) | |
| tree | 2d6b11e9337abb6981f21a8b4619047961a14f32 | |
| parent | 5ec3a3cba8029b577db1631f9db52f99954e4f54 (diff) | |
| download | eventlet-econnrefused_unwrap_socket_error.tar.gz | |
green.socket: create_connection() was wrapping all exceptions in socket.error; Thanks to Donagh McCabeeconnrefused_unwrap_socket_error
Now raise socket.error unchanged, wrap everything else.
https://bitbucket.org/eventlet/eventlet/issue/168/create_connection-incorrectly-raises
| -rw-r--r-- | eventlet/green/socket.py | 10 | ||||
| -rw-r--r-- | tests/test__socket_errors.py | 10 |
2 files changed, 16 insertions, 4 deletions
diff --git a/eventlet/green/socket.py b/eventlet/green/socket.py index 2ec9d1b..e8ef032 100644 --- a/eventlet/green/socket.py +++ b/eventlet/green/socket.py @@ -1,6 +1,6 @@ import os import sys -from eventlet.hubs import get_hub + __import__('eventlet.green._socket_nodns') __socket = sys.modules['eventlet.green._socket_nodns'] @@ -39,7 +39,7 @@ def create_connection(address, is used. """ - msg = "getaddrinfo returns an empty list" + err = "getaddrinfo returns an empty list" host, port = address for res in getaddrinfo(host, port, 0, SOCK_STREAM): af, socktype, proto, canonname, sa = res @@ -54,8 +54,10 @@ def create_connection(address, return sock except error as e: - msg = e + err = e if sock is not None: sock.close() - raise error(msg) + if not isinstance(err, error): + err = error(err) + raise err diff --git a/tests/test__socket_errors.py b/tests/test__socket_errors.py index 7832de0..21fab40 100644 --- a/tests/test__socket_errors.py +++ b/tests/test__socket_errors.py @@ -52,5 +52,15 @@ class TestSocketErrors(unittest.TestCase): cs.close() server.close() + +def test_create_connection_refused(): + errno = None + try: + socket.create_connection(('127.0.0.1', 0)) + except socket.error as ex: + errno = ex.errno + assert errno in [111, 61, 10061], 'Expected socket.error ECONNREFUSED, got {0}'.format(errno) + + if __name__ == '__main__': unittest.main() |
