I believe I found an error in the Ethernet library. In socket.cpp, function socketRecv, line 236.
It is currently:
Code:
233: if (ret > len) ret = len; // more data available than buffer length
234: uint16_t ptr = state[s].RX_RD;
235: read_data(s, ptr, buf, ret);
236: ptr += len;
237: state[s].RX_RD = ptr;
238: state[s].RX_RSR -= ret;
239: uint16_t inc = state[s].RX_inc + ret;
but should be:
Code:
233: if (ret > len) ret = len; // more data available than buffer length
234: uint16_t ptr = state[s].RX_RD;
235: read_data(s, ptr, buf, ret);
236: ptr += ret; // len is requested length, ret is available length
237: state[s].RX_RD = ptr;
238: state[s].RX_RSR -= ret;
239: uint16_t inc = state[s].RX_inc + ret;