main()
{
int sockfd; // Socket Id
struct sockaddr_in servAddr; // Holds server socket address
struct sockaddr_in cliAddr; // Holds client socket address
int ret; // Generic return value
int clilen; // Length of the client socket
// address structure
problemMessage aProb; // The error message received
// Create a datagram (UDP) socket
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
cerr << "Could not open datagram socket" << endl;
return 1;
}
// Set up a structure to accept socket messages
// from clients on the network
memset((char *)&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(6543);
// Bind this structure to the socket identifier
if (bind(sockfd, (struct sockaddr *)&servAddr,
sizeof(servAddr)) < 0)
{
cerr << "Could not bind to socket" << endl;
return 1;
}
clilen = sizeof(cliAddr);
for(;;)
{
// Wait for a message on the socket
ret = recvfrom(sockfd, (char *)&aProb, sizeof(problemMessage),
0, (struct sockaddr *)&cliAddr, &clilen);
if (ret < 0)
{
cerr << "Error receiving message from socket" << endl;
continue;
}
// Return the message identifier directly back
// to the client for acknowlegement
int retval = aProb.getMessageId();
if (sendto(sockfd, (char *)&retval, sizeof(retval), 0,
(struct sockaddr *)&cli_addr, clilen) != sizeof(retval))
cerr << "Error sending to socket" << endl;
// Display the values of the error message
cout << "**** New Message Received ****" << endl;
cout << "App Name: " << aProb.getApplicationName() << endl;
cout << "PID : " << aProb.getProcessId() << endl;
cout << "Message : " << aProb.getProblemMessage() << endl;
cout << "Severity: " << aProb.getSeverity() << endl;
cout << "Msg Num : " << aProb.getMessageId() << endl << endl;
}
return 0;
}
//End of File