QUERY · ISSUE
esp8266: socket blocking settings are inherited by accept() when they probably shouldn't be
port-esp8266
Test code:
import time, socket
s = socket.socket()
s.bind(socket.getaddrinfo("0.0.0.0", 8000)[0][-1])
s.setblocking(False)
s.listen(1)
while True:
try:
s2, _ = s.accept()
break
except OSError as er:
print(repr(er))
time.sleep(1)
print('connection')
s2.recv(10)
On CPy and uPy unix, running the above code and connecting to the socket will block indefinitely at the last line, because the accepted socket s2 defaults to blocking mode.
On esp8266 the accepted socket s2 inherits the non-blocking behaviour from s.
CANDIDATE · ISSUE
esp8266: listen()/accept() broken?
ports
I'm testing the following server script:
import esp
esp.connect('xxx', 'xxx')
s = esp.socket()
def on_connect(sock):
print(s.accept())
s.bind(('', 80))
s.onconnect(on_connect)
s.listen(5)
But get a OSError: not listening everytime I connect. Seems like something is broken?