home *** CD-ROM | disk | FTP | other *** search
/ ftp.ncftp.com / ftp.ncftp.com.zip / ftp.ncftp.com / libncftp / older_versions / libncftp-3.1.5-src.tar.gz / libncftp-3.1.5-src.tar / libncftp-3.1.5 / sio / SAcceptS.c < prev    next >
C/C++ Source or Header  |  2001-11-19  |  1KB  |  58 lines

  1. #include "syshdrs.h"
  2. #ifdef PRAGMA_HDRSTOP
  3. #    pragma hdrstop
  4. #endif
  5.  
  6. int
  7. SAcceptS(int sfd, struct sockaddr_in *const addr, int tlen)
  8. {
  9.     int result;
  10.     fd_set ss;
  11.     struct timeval tv;
  12.     sockaddr_size_t size;
  13.  
  14.     if (tlen <= 0) {
  15.         errno = 0;
  16.         for (;;) {
  17.             size = (sockaddr_size_t) sizeof(struct sockaddr_in);
  18.             result = accept(sfd, (struct sockaddr *) addr, &size);
  19.             if ((result >= 0) || (errno != EINTR))
  20.                 return (result);
  21.         }
  22.     }
  23.  
  24.     forever {
  25.         errno = 0;
  26.         MY_FD_ZERO(&ss);
  27. #if defined(__DECC) || defined(__DECCXX)
  28. #pragma message save
  29. #pragma message disable trunclongint
  30. #endif
  31.         MY_FD_SET(sfd, &ss);
  32. #if defined(__DECC) || defined(__DECCXX)
  33. #pragma message restore
  34. #endif
  35.         tv.tv_sec = (tv_sec_t) tlen;
  36.         tv.tv_usec = 0;
  37.         result = select(sfd + 1, SELECT_TYPE_ARG234 &ss, NULL, NULL, SELECT_TYPE_ARG5 &tv);
  38.         if (result == 1) {
  39.             /* ready */
  40.             break;
  41.         } else if (result == 0) {
  42.             /* timeout */
  43.             errno = ETIMEDOUT;
  44.             SETWSATIMEOUTERR
  45.             return (kTimeoutErr);
  46.         } else if (errno != EINTR) {
  47.             return (-1);
  48.         }
  49.     }
  50.  
  51.     do {
  52.         size = (sockaddr_size_t) sizeof(struct sockaddr_in);
  53.         result = accept(sfd, (struct sockaddr *) addr, &size);
  54.     } while ((result < 0) && (errno == EINTR));
  55.  
  56.     return (result);
  57. }    /* SAcceptS */
  58.