Mercurial > repos > blastem
changeset 1973:cd163b230cf9
Fix handling of remote disconnects
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 08 May 2020 15:17:47 -0700 |
parents | f2d37131840e |
children | 04b79a725b7f |
files | event_log.c util.c |
diffstat | 2 files changed, 14 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/event_log.c Fri May 08 14:59:49 2020 -0700 +++ b/event_log.c Fri May 08 15:17:47 2020 -0700 @@ -253,12 +253,20 @@ sent = send(remotes[i], remote_send_progress[i], output_stream.next_out - remote_send_progress[i], 0); if (sent >= 0) { remote_send_progress[i] += sent; - } else if (socket_error_is_wouldblock()) { + } else if (!socket_error_is_wouldblock()) { socket_close(remotes[i]); remotes[i] = remotes[num_remotes-1]; remote_send_progress[i] = remote_send_progress[num_remotes-1]; remote_needs_state[i] = remote_needs_state[num_remotes-1]; num_remotes--; + if (!num_remotes) { + //last remote disconnected, reset buffers/deflate + fully_active = 0; + deflateReset(&output_stream); + output_stream.next_out = compressed; + output_stream.avail_out = compressed_storage; + buffer.size = 0; + } i--; break; }
--- a/util.c Fri May 08 14:59:49 2020 -0700 +++ b/util.c Fri May 08 15:17:47 2020 -0700 @@ -726,9 +726,14 @@ #else #include <fcntl.h> +#include <signal.h> void socket_init(void) { + //SIGPIPE on network sockets is not desired + //would be better to do this in a more limited way, + //but the alternatives are not portable + signal(SIGPIPE, SIG_IGN); } int socket_blocking(int sock, int should_block)