Mercurial > repos > blastem
changeset 1518:713b504dc577
Limit received LSD packets to 1440 bytes to match expectations of wflash code. Use MSG_NOSIGNAL to avoid getting killed with SIGPIPE
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 31 Jan 2018 21:59:08 -0800 |
parents | 9136b7ea1ccb |
children | 1f745318f10a |
files | megawifi.c |
diffstat | 1 files changed, 7 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/megawifi.c Mon Jan 22 22:03:55 2018 -0800 +++ b/megawifi.c Wed Jan 31 21:59:08 2018 -0800 @@ -19,6 +19,7 @@ }; #define STX 0x7E #define ETX 0x7E +#define MAX_RECV_SIZE 1440 #define E(N) N enum { @@ -130,12 +131,11 @@ mw->channel_flags |= 1 << (channel + 1); } } else if (mw->channel_state[channel] == 2 && mw->receive_bytes < sizeof(mw->receive_buffer) - 4) { - int bytes = recv( - mw->sock_fds[channel], - mw->receive_buffer + mw->receive_bytes + 3, - sizeof(mw->receive_buffer) - 4 - mw->receive_bytes, - 0 - ); + size_t max = sizeof(mw->receive_buffer) - 4 - mw->receive_bytes; + if (max > MAX_RECV_SIZE) { + max = MAX_RECV_SIZE; + } + int bytes = recv(mw->sock_fds[channel], mw->receive_buffer + mw->receive_bytes + 3, max, 0); if (bytes > 0) { mw_putc(mw, STX); mw_putc(mw, bytes >> 8 | (channel+1) << 4); @@ -315,7 +315,7 @@ } } else if (mw->sock_fds[mw->transmit_channel - 1] >= 0 && mw->channel_state[mw->transmit_channel - 1] == 2) { uint8_t channel = mw->transmit_channel - 1; - int sent = send(mw->sock_fds[channel], mw->transmit_buffer, mw->transmit_bytes, 0); + int sent = send(mw->sock_fds[channel], mw->transmit_buffer, mw->transmit_bytes, MSG_NOSIGNAL); if (sent < 0 && errno != EAGAIN && errno != EWOULDBLOCK) { close(mw->sock_fds[channel]); mw->sock_fds[channel] = -1;