summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--extmod/modlwip.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/extmod/modlwip.c b/extmod/modlwip.c
index 6d9d240329..85f39a6177 100644
--- a/extmod/modlwip.c
+++ b/extmod/modlwip.c
@@ -353,18 +353,19 @@ STATIC mp_uint_t lwip_udp_receive(lwip_socket_obj_t *socket, byte *buf, mp_uint_
}
// Helper function for send/sendto to handle TCP packets
-STATIC mp_uint_t lwip_tcp_send(lwip_socket_obj_t *socket, const byte *buf, mp_uint_t
- len, int *_errno) {
- u16_t available = tcp_sndbuf((struct tcp_pcb *)socket->pcb);
+STATIC mp_uint_t lwip_tcp_send(lwip_socket_obj_t *socket, const byte *buf, mp_uint_t len, int *_errno) {
+ struct tcp_pcb *pcb = (struct tcp_pcb *)socket->pcb;
+ u16_t available = tcp_sndbuf(pcb);
+ u16_t write_len = MIN(available, len);
- err_t err = tcp_write((struct tcp_pcb *)socket->pcb, buf, (available > len ? len : available), TCP_WRITE_FLAG_COPY);
+ err_t err = tcp_write(pcb, buf, write_len, TCP_WRITE_FLAG_COPY);
if (err != ERR_OK) {
*_errno = error_lookup_table[-err];
return -1;
}
- return available > len ? len : available;
+ return write_len;
}
// Helper function for recv/recvfrom to handle TCP packets