sendAlert::sendAlert(char *_applicationName, int timeoutCount) : theProblem(_application_name, timeoutCount) { pthread_t threadId; sigset_t signalSet; sigemptyset(&signalSet); // Initialize signal set to contain no signals sigaddset(&signalSet, SIGALRM); // Add SIGALRM to the signal set // Block the SIGALRM signal from the main process thread sigprocmask(SIG_BLOCK, &signalSet, NULL); status = 1; if (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) // create UDP socket { cerr << "Could not open datagram socket"; status = 0; return; } memset((char *)&servAddr, 0, sizeof(servAddr)); servAddr.sin_family = AF_INET; // Set the appropriate subnet address of the server servAddr.sin_addr.s_addr = inet_addr("555.555.555.0"); servAddr.sin_port = htons(6543); // Set appropriate port of the server memset((char *)&cliAddr, 0, sizeof(cliAddr)); cliAddr.sin_family = AF_INET; // Accept acknowledgment from server from any address in the network cliAddr.sin_addr.s_addr = htonl(INADDR_ANY); cli_addr.sin_port = htons(0); // Bind socket to receive ack. from any server in network, allowing // flexibility with respect to placement of server in the network if (bind(sockfd, (struct sockaddr *)&cliAddr, sizeof(cliAddr))<0) { cerr << "Could not bind to socket"; status = 0; return; } // Create the processMessageQueueThread if (pthread_create(&threadId, 0, processMessageQueueThread, (void *)NULL) != 0) { cerr << "Could not create processMessageQueueThread"; status = 0; return; } // No need to wait for thread completion -- it's in an endless loop } //End of File