diff --git a/examples/server_example3/server_example3.c b/examples/server_example3/server_example3.c index b0681a0..2352bc6 100644 --- a/examples/server_example3/server_example3.c +++ b/examples/server_example3/server_example3.c @@ -135,6 +135,7 @@ main(int argc, char** argv) Timestamp_clearFlags(&iecTimestamp); Timestamp_setTimeInMilliseconds(&iecTimestamp, timestamp); + Timestamp_setLeapSecondKnown(&iecTimestamp, true); /* toggle clock-not-synchronized flag in timestamp */ if (((int) t % 2) == 0) diff --git a/src/mms/iso_server/iso_server.c b/src/mms/iso_server/iso_server.c index 65bc885..577a95e 100644 --- a/src/mms/iso_server/iso_server.c +++ b/src/mms/iso_server/iso_server.c @@ -266,11 +266,15 @@ handleClientConnections(IsoServer self) static bool setupIsoServer(IsoServer self) { + bool success = true; + self->serverSocket = (Socket) TcpServerSocket_create(self->localIpAddress, self->tcpPort); if (self->serverSocket == NULL) { self->state = ISO_SVR_STATE_ERROR; - return false; + success = false; + + goto exit_function; } ServerSocket_setBacklog((ServerSocket) self->serverSocket, BACKLOG); @@ -284,7 +288,8 @@ setupIsoServer(IsoServer self) printf("ISO_SERVER: server is limited to %i client connections.\n", (int) CONFIG_MAXIMUM_TCP_CLIENT_CONNECTIONS); #endif - return true; +exit_function: + return success; } @@ -468,6 +473,15 @@ IsoServer_getAuthenticatorParameter(IsoServer self) void IsoServer_startListening(IsoServer self) { + if (self->state == ISO_SVR_STATE_RUNNING) { + if (DEBUG_ISO_SERVER) + printf("ISO_SERVER: server already in RUNNING state!\n"); + + goto exit_function; + } + + self->state = ISO_SVR_STATE_IDLE; + self->serverThread = Thread_create((ThreadExecutionFunction) isoServerThread, self, false); Thread_start(self->serverThread); @@ -478,6 +492,9 @@ IsoServer_startListening(IsoServer self) if (DEBUG_ISO_SERVER) printf("ISO_SERVER: new iso server thread started\n"); + +exit_function: + return; } #endif /* (CONFIG_MMS_THREADLESS_STACK != 1) */