summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Shepelev <temotor@gmail.com>2015-02-13 00:27:22 +0300
committerSergey Shepelev <temotor@gmail.com>2015-02-13 00:27:22 +0300
commit411827efc6357afd99a44d7e0d9b5f922c6e8c23 (patch)
tree2d6b11e9337abb6981f21a8b4619047961a14f32
parent5ec3a3cba8029b577db1631f9db52f99954e4f54 (diff)
downloadeventlet-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.py10
-rw-r--r--tests/test__socket_errors.py10
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()