home *** CD-ROM | disk | FTP | other *** search
/ ftp.ncftp.com / ftp.ncftp.com.zip / ftp.ncftp.com / libncftp / libncftp-3.2.5-src.zip / libncftp-3.2.5 / sio / main.c < prev    next >
C/C++ Source or Header  |  2010-10-30  |  1KB  |  70 lines

  1. #include "syshdrs.h"
  2. #ifdef PRAGMA_HDRSTOP
  3. #    pragma hdrstop
  4. #endif
  5.  
  6. const char *gLibSio_Uses_Me_To_Quiet_Variable_Unused_Warnings = NULL;
  7.  
  8. /* Your app can set this to 1 to avoid pointless setting/restoring of SIGPIPE */
  9. int sio_sigpipe_ignored_already = 0;
  10.  
  11.  
  12.  
  13. void
  14. SIOPipeSignalIsBeingIgnoredGloballyByApplication(int value)
  15. {
  16.     sio_sigpipe_ignored_already = value;
  17. }    /* SIOPipeSignalIsBeingIgnoredGloballyByApplication */
  18.  
  19.  
  20.  
  21. #ifdef UNIX_SIGNALS
  22.  
  23. #if defined(HPUX) || defined(__hpux__)
  24. volatile Sjmp_buf gNetTimeoutJmp;
  25. volatile Sjmp_buf gPipeJmp;
  26. #else
  27. Sjmp_buf gNetTimeoutJmp;
  28. Sjmp_buf gPipeJmp;
  29. #endif
  30.  
  31. void
  32. SIOHandler(int sigNum)
  33. {
  34.     if (sigNum == SIGPIPE)
  35.         SLongjmp(gPipeJmp, 1);
  36.     SLongjmp(gNetTimeoutJmp, 1);
  37. }    /* SIOHandler */
  38.  
  39.  
  40.  
  41.  
  42. void (*SSignal(int signum, void (*handler)(int)))(int)
  43. {
  44. #ifdef HAVE_SIGACTION
  45.     struct sigaction sa, osa;
  46.  
  47.     (void) sigemptyset(&sa.sa_mask);
  48.     sa.sa_flags = 0;
  49.     sa.sa_handler = handler;
  50.     if (signum == SIGALRM) {
  51. #ifdef SA_INTERRUPT
  52.         sa.sa_flags |= SA_INTERRUPT;
  53. #endif
  54.     } else {
  55. #ifdef SA_RESTART
  56.         sa.sa_flags |= SA_RESTART;
  57. #endif
  58.     }
  59.     if (sigaction(signum, &sa, &osa) < 0)
  60.         return (SIG_ERR);
  61.     return (osa.sa_handler);
  62. #else
  63.     return SSignal(signum, handler);
  64. #endif    /* HAVE_SIGACTION */
  65. }
  66.  
  67. #endif    /* UNIX_SIGNALS */
  68.  
  69. /* eof main.c */
  70.