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 / UAcceptS.c < prev    next >
C/C++ Source or Header  |  2001-11-19  |  1KB  |  59 lines

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