Do not block on accept() if server died

The server may die before connecting to the client. In that case, the
client was blocked indefinitely (until Ctrl+C) on accept().

To avoid the problem, close the server socket once the server process is
dead.
This commit is contained in:
Romain Vimont
2020-03-28 23:56:25 +01:00
parent d421741a83
commit a346bb80f4
2 changed files with 34 additions and 12 deletions

View File

@@ -3,6 +3,7 @@
#include <stdbool.h>
#include <stdint.h>
#include <SDL2/SDL_atomic.h>
#include <SDL2/SDL_thread.h>
#include "config.h"
@@ -14,6 +15,7 @@ struct server {
char *serial;
process_t process;
SDL_Thread *wait_server_thread;
SDL_atomic_t server_socket_closed;
socket_t server_socket; // only used if !tunnel_forward
socket_t video_socket;
socket_t control_socket;
@@ -27,6 +29,7 @@ struct server {
.serial = NULL, \
.process = PROCESS_NONE, \
.wait_server_thread = NULL, \
.server_socket_closed = {0}, \
.server_socket = INVALID_SOCKET, \
.video_socket = INVALID_SOCKET, \
.control_socket = INVALID_SOCKET, \