Code: Select all
def close(self,conn):
try: conn.close()
except Exception as err:
print('Close error:',err)
while True:
print('HTTP serve on IP:', wlan.net.ifconfig()[0],'PORT:', self.port )
try:
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind(('0.0.0.0', self.port))
self.sock.listen(1)
while True:
try:
conn, addr = self.sock.accept()
raw = None
while True:
line = conn.readline()
if not raw and len(line) > 10:
raw = line.decode('UTF-8')
if not line or line == b'\r\n':
break
if not raw:
self.close(conn)
else:
self.request(conn,raw)
except Exception as e:
self.close(conn)
print('Sock Conn Err:',e)
break
gc.collect()
except Exception as e:
self.active = False
print('Sock Listen Err:',e)
break
Is it possible to make this bullet-proof such that it automatically recovers from socket errors and does not require a hard reset ?
After a listen failure, attempts to establish a new listen always results in "[Errno 12] ENOMEM".