Skip to content

Commit 5186fe8

Browse files
authored
Merge pull request #33 from bcmi-labs/umqtt_improvements
umqtt: Make umqtt socket non-blocking by default.
2 parents 1dc1891 + a7f939a commit 5186fe8

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

arduino_iot_cloud/umqtt.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@
2727
import usocket as socket
2828
import ustruct as struct
2929
import ulogging as logging
30+
import uselect as select
3031
except ImportError:
3132
import socket
3233
import struct
3334
import logging
35+
import select
3436
from arduino_iot_cloud.ussl import wrap_socket
3537

3638

@@ -90,7 +92,7 @@ def set_last_will(self, topic, msg, retain=False, qos=0):
9092
self.lw_qos = qos
9193
self.lw_retain = retain
9294

93-
def connect(self, clean_session=True):
95+
def connect(self, clean_session=True, timeout=5.0):
9496
addr = socket.getaddrinfo(self.server, self.port)[0][-1]
9597

9698
if self.sock is not None:
@@ -99,11 +101,13 @@ def connect(self, clean_session=True):
99101

100102
try:
101103
self.sock = socket.socket()
104+
self.sock.settimeout(timeout)
102105
self.sock = wrap_socket(self.sock, **self.ssl_params)
103106
self.sock.connect(addr)
104107
except Exception:
105108
self.sock.close()
106109
self.sock = socket.socket()
110+
self.sock.settimeout(timeout)
107111
self.sock.connect(addr)
108112
self.sock = wrap_socket(self.sock, **self.ssl_params)
109113

@@ -214,9 +218,8 @@ def subscribe(self, topic, qos=0):
214218
# messages processed internally.
215219
def wait_msg(self):
216220
res = self.sock.read(1)
217-
if res == b"" or res is None:
221+
if res is None or res == b"":
218222
return None
219-
self.sock.setblocking(True)
220223
if res == b"\xd0": # PINGRESP
221224
sz = self.sock.read(1)[0]
222225
assert sz == 0
@@ -246,5 +249,6 @@ def wait_msg(self):
246249
# If not, returns immediately with None. Otherwise, does
247250
# the same processing as wait_msg.
248251
def check_msg(self):
249-
self.sock.setblocking(False)
250-
return self.wait_msg()
252+
r, w, e = select.select([self.sock], [], [], 0.05)
253+
if (len(r)):
254+
return self.wait_msg()

0 commit comments

Comments
 (0)