From: 依云 Date: Mon, 5 Sep 2016 10:03:36 +0000 (+0800) Subject: tcpclient: catch any `socket()` errors X-Git-Tag: v4.5.0~68^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e40b89a8691621653ccca66e9bf81240e6cb1ae5;p=thirdparty%2Ftornado.git 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. --- 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)