Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // global
- pthread_t serverTid;
- // call the following after server's bind() and listen()
- // Create a thread to handle keepalive miss count.
- if(pthread_create(&serverTid, NULL, serverHandleKeepalive, NULL) != 0)
- {
- perror("server pthread_create() failed");
- exit(EXIT_FAILURE);
- }
- void* serverHandleKeepalive(void* arg)
- {
- // printf("The keepalive handling thread started.\n");
- int reportCounter = 0;
- while(1)
- {
- int sessionIdx;
- for(sessionIdx = 1; sessionIdx < nclient + 1; sessionIdx++)
- {
- if(sessions[sessionIdx].socketFd <= 0)
- {
- continue;
- }
- if(sessions[sessionIdx].kalMissNum == 5)
- {
- // printf("loss of keepalive message: user '%s', fd = '%d', sessionIdx = '%d'\n",
- // sessions[sessionIdx].username, pollfdArray[sessionIdx+1].fd, sessionIdx);
- // fflush(stdout);
- char tempTimeMsg[MAXCMDLEN];
- memset(sessions[sessionIdx].interactTime, 0, sizeof(sessions[sessionIdx].interactTime));
- getDateTime(sessions[sessionIdx].interactTime);
- strcpy(tempTimeMsg, sessions[sessionIdx].interactTime);
- memset(sessions[sessionIdx].interactTime, 0, sizeof(sessions[sessionIdx].interactTime));
- sprintf(sessions[sessionIdx].interactTime,
- "'%s' [sockfd= %d]: loss of keepalive messages detected at %s, connection closed",
- sessions[sessionIdx].username, sessions[sessionIdx].socketFd, tempTimeMsg);
- serverCloseChatSession(sessionIdx, ISEXIT);
- }
- else if(sessions[sessionIdx].kalMissNum < 5)
- {
- sessions[sessionIdx].kalMissNum += 1;
- }
- }
- sleep(KAL_interval);
- if(++reportCounter % 10 == 0)
- {
- printActivityReport();
- }
- }
- }
- // call the following when exiting the server
- // Cancel the keepalive thread.
- pthread_cancel(serverTid);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement