home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / news / nntp / nntplink3.1.0 / sleep.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-25  |  2.1 KB  |  105 lines

  1. #include <fcntl.h>
  2. #include <errno.h>
  3. #include "conf.h"
  4. #ifdef FAKESYSLOG
  5. #include "fsyslog.h"
  6. #else
  7. #include <syslog.h>
  8. #endif
  9. #include <sys/time.h>
  10. #include "readline.h"
  11. #include "nntplink.h"
  12.  
  13. extern Boolean Abort_signaled;
  14. extern long Close_timeout;
  15. extern Boolean Debug;
  16. extern int Dtablesize;
  17. extern long Exit_timeout;
  18. extern long Idle_time;
  19. extern int Input_from;
  20. extern Boolean Reset_signaled;
  21.  
  22. extern void abort_nntplink();
  23. extern void close_connection();
  24. extern void fail();
  25. extern void log();
  26. extern void reset_logfile();
  27. extern void update_batchfile();
  28.  
  29. #ifdef HAVE_SELECT
  30. struct timeval timeout = {0, 0};
  31. #endif
  32.  
  33. void
  34.   check_sleep(sleep_time, create_batch)
  35. long sleep_time;
  36. Boolean create_batch;
  37. {
  38.     static char *fname = "check_sleep: ";
  39. #ifdef HAVE_SELECT
  40.     fd_set readfds;
  41.     long start_time;
  42.     int cnt;
  43. #endif
  44.  
  45.     Idle_time += sleep_time;
  46.  
  47.     if ((Idle_time > Close_timeout) && (Host.connected) && 
  48.     (Close_timeout != NEVER)) {
  49.  
  50.     dlog(LOG_DEBUG, fname, "%sreached close timeout\n");
  51.     close_connection(SEND_QUIT_MSG);
  52.     }
  53.  
  54.     if (Abort_signaled ||
  55.     ((Exit_timeout != NEVER) && (Idle_time > Exit_timeout))) {
  56.  
  57.     if (Debug && !Abort_signaled)
  58.       dlog(LOG_DEBUG, fname, "%sreached exit timeout\n");
  59.  
  60.     abort_nntplink();
  61.     }
  62.  
  63.     if (Reset_signaled)
  64.       update_batchfile();
  65.  
  66. #ifdef HAVE_SELECT
  67.     timeout.tv_sec = sleep_time;
  68.  
  69.     while (timeout.tv_sec > 0 && !Abort_signaled) {
  70.     start_time = time(NULL);
  71.     FD_ZERO(&readfds);
  72.     if (Input_from & FLG_STDIN)
  73.       FD_SET(fb_fileno(Stdin), &readfds);
  74.  
  75.     if ((cnt = select(Dtablesize,&readfds,0,0,&timeout)) == 0)
  76.       break;
  77.  
  78.     if ((cnt == FAIL) && (errno != EINTR))
  79.       fail(fname, "%s%s: select() failed (try #undef HAVE_SELECT): %s",
  80.            Host.name, errmsg(errno));
  81.  
  82.     if (cnt > 0) {
  83.       if (create_batch)
  84.         update_batchfile();
  85.       else if (fb_eof(Stdin)) {
  86.         log(LOG_INFO, fname, "%s%s: EOF on stdin, exiting\n",
  87.         Host.name);
  88.         Abort_signaled = TRUE;
  89.       } else
  90.         break;
  91.     }
  92.     timeout.tv_sec -= (time(NULL) - start_time);
  93.     }
  94.  
  95. #else
  96.     (void) sleep((unsigned)sleep_time);
  97. #endif
  98.  
  99.     dlog(LOG_DEBUG, "", "%s.");
  100.  
  101.     return;
  102. }
  103.  
  104.  
  105.