// 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]);
// 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();
}
CubemapStateProto state;
state.set_server_sock(server_sock);
+ state.set_port(port);
for (int i = 0; i < NUM_SERVERS; ++i) {
servers[i].stop();