static void handleClient() { OlySocket client(sock->acceptConnection()); int pid = fork(); if (pid < 0) { // Error logg.logError("Fork process failed. Please power cycle the target device if this error persists."); handleException(); } else if (pid == 0) { // Child sock->closeServerSocket(); udpListener.close(); monitor.close(); annotateListener.close(); child = new Child(&client, numSessions + 1); child->run(); delete child; exit(0); } else { // Parent client.closeSocket(); pthread_mutex_lock(&numSessions_mutex); numSessions++; pthread_mutex_unlock(&numSessions_mutex); // Maximum number of connections is 2 int wait = 0; while (numSessions > 1) { // Throttle until one of the children exits before continuing to accept another socket connection logg.logMessage("%d sessions active!", numSessions); if (wait++ >= 10) { // Wait no more than 10 seconds // Kill last created child kill(pid, SIGALRM); break; } sleep(1); } } }