comparison event_log.c @ 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
comparison
equal deleted inserted replaced
1972:f2d37131840e 1973:cd163b230cf9
251 while (sent && output_stream.next_out > remote_send_progress[i]) 251 while (sent && output_stream.next_out > remote_send_progress[i])
252 { 252 {
253 sent = send(remotes[i], remote_send_progress[i], output_stream.next_out - remote_send_progress[i], 0); 253 sent = send(remotes[i], remote_send_progress[i], output_stream.next_out - remote_send_progress[i], 0);
254 if (sent >= 0) { 254 if (sent >= 0) {
255 remote_send_progress[i] += sent; 255 remote_send_progress[i] += sent;
256 } else if (socket_error_is_wouldblock()) { 256 } else if (!socket_error_is_wouldblock()) {
257 socket_close(remotes[i]); 257 socket_close(remotes[i]);
258 remotes[i] = remotes[num_remotes-1]; 258 remotes[i] = remotes[num_remotes-1];
259 remote_send_progress[i] = remote_send_progress[num_remotes-1]; 259 remote_send_progress[i] = remote_send_progress[num_remotes-1];
260 remote_needs_state[i] = remote_needs_state[num_remotes-1]; 260 remote_needs_state[i] = remote_needs_state[num_remotes-1];
261 num_remotes--; 261 num_remotes--;
262 if (!num_remotes) {
263 //last remote disconnected, reset buffers/deflate
264 fully_active = 0;
265 deflateReset(&output_stream);
266 output_stream.next_out = compressed;
267 output_stream.avail_out = compressed_storage;
268 buffer.size = 0;
269 }
262 i--; 270 i--;
263 break; 271 break;
264 } 272 }
265 if (remote_send_progress[i] > min_progress) { 273 if (remote_send_progress[i] > min_progress) {
266 min_progress = remote_send_progress[i]; 274 min_progress = remote_send_progress[i];