From cd829cd1384b9edb2d70705e568831c8d1e88be2 Mon Sep 17 00:00:00 2001 From: Himura Kazuto Date: Thu, 23 Nov 2017 20:26:43 +0300 Subject: [PATCH 1/2] supported connection timeout --- umqtt.simple/umqtt/simple.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/umqtt.simple/umqtt/simple.py b/umqtt.simple/umqtt/simple.py index 8216fa5e1..90c47e2a5 100644 --- a/umqtt.simple/umqtt/simple.py +++ b/umqtt.simple/umqtt/simple.py @@ -52,8 +52,9 @@ def set_last_will(self, topic, msg, retain=False, qos=0): self.lw_qos = qos self.lw_retain = retain - def connect(self, clean_session=True): + def connect(self, clean_session=True, timeout=None): self.sock = socket.socket() + self.sock.settimeout(timeout) addr = socket.getaddrinfo(self.server, self.port)[0][-1] self.sock.connect(addr) if self.ssl: From 85bdc888bc7b4121f86bdfddc75ff1c803bd6f15 Mon Sep 17 00:00:00 2001 From: "Vladislav Glagolev (DevExpress)" Date: Thu, 25 Jan 2018 18:29:06 +0300 Subject: [PATCH 2/2] switched timeout to poller.poll. Needs testing --- umqtt.simple/umqtt/simple.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/umqtt.simple/umqtt/simple.py b/umqtt.simple/umqtt/simple.py index 90c47e2a5..1e3537750 100644 --- a/umqtt.simple/umqtt/simple.py +++ b/umqtt.simple/umqtt/simple.py @@ -1,6 +1,7 @@ import usocket as socket import ustruct as struct from ubinascii import hexlify +import uselect class MQTTException(Exception): pass @@ -26,6 +27,7 @@ def __init__(self, client_id, server, port=0, user=None, password=None, keepaliv self.lw_msg = None self.lw_qos = 0 self.lw_retain = False + self.poller = uselect.poll() def _send_str(self, s): self.sock.write(struct.pack("!H", len(s))) @@ -54,7 +56,6 @@ def set_last_will(self, topic, msg, retain=False, qos=0): def connect(self, clean_session=True, timeout=None): self.sock = socket.socket() - self.sock.settimeout(timeout) addr = socket.getaddrinfo(self.server, self.port)[0][-1] self.sock.connect(addr) if self.ssl: @@ -84,6 +85,11 @@ def connect(self, clean_session=True, timeout=None): i += 1 premsg[i] = sz + if timeout: # Checking output availability + self.poller.register(self.sock, uselect.POLLOUT) + if not poller.poll(timeout): + raise OSError("Connection request timed out") + self.sock.write(premsg, i + 2) self.sock.write(msg) #print(hex(len(msg)), hexlify(msg, ":")) @@ -94,6 +100,12 @@ def connect(self, clean_session=True, timeout=None): if self.user is not None: self._send_str(self.user) self._send_str(self.pswd) + + if timeout: # Checking input availability + self.poller.modify(self.sock, uselect.POLLIN) + if not poller.poll(timeout): + raise OSError("Connection response timed out") + resp = self.sock.read(4) assert resp[0] == 0x20 and resp[1] == 0x02 if resp[3] != 0: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy