From e40b89a8691621653ccca66e9bf81240e6cb1ae5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E4=BE=9D=E4=BA=91?= Date: Mon, 5 Sep 2016 18:03:36 +0800 Subject: [PATCH] tcpclient: catch any `socket()` errors so we can try next addresses, e.g. when trying to connect to IPv6 addresses on OSes with IPv6 disabled which fails with a protocol not supported error This fixes #1809. --- tornado/tcpclient.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tornado/tcpclient.py b/tornado/tcpclient.py index f594d91b8..111468607 100644 --- a/tornado/tcpclient.py +++ b/tornado/tcpclient.py @@ -177,7 +177,13 @@ class TCPClient(object): def _create_stream(self, max_buffer_size, af, addr): # Always connect in plaintext; we'll convert to ssl if necessary # after one connection has completed. - stream = IOStream(socket.socket(af), - io_loop=self.io_loop, - max_buffer_size=max_buffer_size) - return stream.connect(addr) + try: + stream = IOStream(socket.socket(af), + io_loop=self.io_loop, + max_buffer_size=max_buffer_size) + except socket.error as e: + fu = Future() + fu.set_exception(e) + return fu + else: + return stream.connect(addr) -- 2.47.2