Skip to content

Commit 85d1c3c

Browse files
committed
Changed how incoming data is received
Solved problem when data is sent in chunks and is not received in full. Bypassed ESP32 TCP buffer limit of 2880 bytes.
1 parent eaea81d commit 85d1c3c

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

adafruit_httpserver/server.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,25 @@ def poll(self):
102102
conn, _ = self._sock.accept()
103103
with conn:
104104
conn.settimeout(self._timeout)
105-
length, _ = conn.recvfrom_into(self._buffer)
106-
107-
request = HTTPRequest(raw_request=self._buffer[:length])
105+
received_data = bytearray()
106+
107+
# Receiving data until timeout
108+
while "Receiving data":
109+
try:
110+
length = conn.recv_into(self._buffer)
111+
received_data += self._buffer[:length]
112+
except OSError as ex:
113+
if ex.errno == ETIMEDOUT:
114+
break
115+
except Exception as ex:
116+
raise ex
117+
118+
# Return if no data received
119+
if not received_data:
120+
return
121+
122+
# Parsing received data
123+
request = HTTPRequest(raw_request=received_data)
108124

109125
handler = self.route_handlers.get(
110126
_HTTPRoute(request.path, request.method), None

0 commit comments

Comments
 (0)