This repository was archived by the owner on Sep 6, 2023. It is now read-only.
This repository was archived by the owner on Sep 6, 2023. It is now read-only.
Write to nonblocking sockets fails #166
Open
Description
In the course of updating this asynchronous MQTT driver I want to make it compatible with ESP32. The code uses a nonblocking socket. I get OSError 119 when writing to the socket. The following test runs on ESP8266 but fails on ESP32.
import network
import socket
from time import sleep
import uerrno
SERVER = '192.168.0.9' # can use 'iot.eclipse.org'
s = network.WLAN(network.STA_IF)
s.active(True)
def connect():
s.disconnect()
sleep(1)
s.connect('SSID', 'PASSWORD') # Redacted EDIT this
print('Awaiting conection')
while not s.isconnected():
sleep(1)
print('Got conection, pausing') # Just to make sure
sleep(10)
print('conection done')
def foo(n):
print('Attempt:', n)
connect()
addr = socket.getaddrinfo(SERVER, 1883)[0][-1] # MQTT
s = socket.socket()
s.setblocking(False)
try:
s.connect(addr)
except OSError as e:
if e.args[0] not in [uerrno.EINPROGRESS, uerrno.ETIMEDOUT]:
print('Error connecting', e)
try:
s.write(b"\xc0\0") # MQTT ping
print('Write succesful.')
except OSError as e:
print('**** ERROR writing ****', e)
s.close()
foo(1)
Note that I issue disconnect() before connecting. This is because my driver reconnects after a network outage. It also ensures consistent behaviour if an application is started with a network connection already active.
Metadata
Metadata
Assignees
Labels
No labels