From 99646561978d4ed5be73f90441c5f64c4d64a0dc Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sun, 7 Apr 2013 15:43:36 +0200 Subject: [PATCH] Reopen the port if it changes between runs. --- cubemap.cpp | 19 +++++++++++++++---- state.proto | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/cubemap.cpp b/cubemap.cpp index f682472..8dff03b 100644 --- a/cubemap.cpp +++ b/cubemap.cpp @@ -282,7 +282,7 @@ int main(int argc, char **argv) // Create the servers. servers = new Server[NUM_SERVERS]; - int server_sock; + int server_sock = -1, old_port = -1; if (argc == 4 && strcmp(argv[2], "-state") == 0) { fprintf(stderr, "Deserializing state from previous process... "); int state_fd = atoi(argv[3]); @@ -303,17 +303,27 @@ int main(int argc, char **argv) // Deserialize the server socket. server_sock = loaded_state.server_sock(); + old_port = loaded_state.port(); fprintf(stderr, "done.\n"); - } else { - server_sock = create_server_socket(port); - + } else{ // TODO: This should come from the config file. for (int i = 0; i < NUM_SERVERS; ++i) { servers[i].add_stream(STREAM_ID); } } + // Open a new server socket if we do not already have one, or if we changed ports. + if (server_sock != -1 && port != old_port) { + fprintf(stderr, "NOTE: Port changed from %d to %d; opening new socket.\n", old_port, port); + close(server_sock); + server_sock = -1; + } + if (server_sock == -1) { + server_sock = create_server_socket(port); + } + + // Start up all the servers! for (int i = 0; i < NUM_SERVERS; ++i) { servers[i].run(); } @@ -335,6 +345,7 @@ int main(int argc, char **argv) CubemapStateProto state; state.set_server_sock(server_sock); + state.set_port(port); for (int i = 0; i < NUM_SERVERS; ++i) { servers[i].stop(); diff --git a/state.proto b/state.proto index 19f2617..d33d689 100644 --- a/state.proto +++ b/state.proto @@ -21,4 +21,5 @@ message CubemapStateProto { repeated ClientProto clients = 1; repeated StreamProto streams = 2; optional int32 server_sock = 3; + optional int32 port = 4; }; -- 2.39.2