From aa76e33f25d07ca5d10997fe51c9d3cff81d4a9e Mon Sep 17 00:00:00 2001 From: Simon Tuckwell Date: Sun, 7 May 2023 12:32:17 +0100 Subject: [PATCH] Added support for servers with IPv6 addresses. --- BlynkLib.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/BlynkLib.py b/BlynkLib.py index 3ba71b3..605c742 100644 --- a/BlynkLib.py +++ b/BlynkLib.py @@ -222,8 +222,19 @@ def redirect(self, server, port): def connect(self): print('Connecting to %s:%d...' % (self.server, self.port)) - s = socket.socket() - s.connect(socket.getaddrinfo(self.server, self.port)[0][-1]) + # Lookup the host with a filter on the results set. + hostinfo = socket.getaddrinfo(self.server, self.port, + type=socket.SOCK_STREAM, + proto=socket.IPPROTO_TCP) + # Use the first host address entry regardless of family. + (family, socktype, proto, canonname, sockaddr) = hostinfo[0] + # An IPv6 sockaddr tuple has extra values so discard these. + address = sockaddr[:2] + # Create a TCP socket supporting IPv4 or IPv6. + s = socket.socket(family=family, + type=socktype, + proto=proto) + s.connect(address) try: s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) except: