Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. // global
  2. pthread_t serverTid;
  3.  
  4. // call the following after server's bind() and listen()
  5. // Create a thread to handle keepalive miss count.
  6. if(pthread_create(&serverTid, NULL, serverHandleKeepalive, NULL) != 0)
  7. {
  8. perror("server pthread_create() failed");
  9. exit(EXIT_FAILURE);
  10. }
  11.  
  12. void* serverHandleKeepalive(void* arg)
  13. {
  14. // printf("The keepalive handling thread started.\n");
  15. int reportCounter = 0;
  16. while(1)
  17. {
  18. int sessionIdx;
  19. for(sessionIdx = 1; sessionIdx < nclient + 1; sessionIdx++)
  20. {
  21. if(sessions[sessionIdx].socketFd <= 0)
  22. {
  23. continue;
  24. }
  25.  
  26. if(sessions[sessionIdx].kalMissNum == 5)
  27. {
  28. // printf("loss of keepalive message: user '%s', fd = '%d', sessionIdx = '%d'\n",
  29. // sessions[sessionIdx].username, pollfdArray[sessionIdx+1].fd, sessionIdx);
  30. // fflush(stdout);
  31.  
  32. char tempTimeMsg[MAXCMDLEN];
  33. memset(sessions[sessionIdx].interactTime, 0, sizeof(sessions[sessionIdx].interactTime));
  34. getDateTime(sessions[sessionIdx].interactTime);
  35. strcpy(tempTimeMsg, sessions[sessionIdx].interactTime);
  36. memset(sessions[sessionIdx].interactTime, 0, sizeof(sessions[sessionIdx].interactTime));
  37. sprintf(sessions[sessionIdx].interactTime,
  38. "'%s' [sockfd= %d]: loss of keepalive messages detected at %s, connection closed",
  39. sessions[sessionIdx].username, sessions[sessionIdx].socketFd, tempTimeMsg);
  40.  
  41. serverCloseChatSession(sessionIdx, ISEXIT);
  42. }
  43. else if(sessions[sessionIdx].kalMissNum < 5)
  44. {
  45. sessions[sessionIdx].kalMissNum += 1;
  46. }
  47. }
  48.  
  49. sleep(KAL_interval);
  50.  
  51. if(++reportCounter % 10 == 0)
  52. {
  53. printActivityReport();
  54. }
  55. }
  56. }
  57.  
  58. // call the following when exiting the server
  59. // Cancel the keepalive thread.
  60. pthread_cancel(serverTid);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement