home *** CD-ROM | disk | FTP | other *** search
/ ftp.ncftp.com / ftp.ncftp.com.zip / ftp.ncftp.com / libncftp / older_versions / libncftp-3.2.2-src.tar.bz2 / libncftp-3.2.2-src.tar / libncftp-3.2.2 / sio / UBind.c < prev    next >
C/C++ Source or Header  |  2003-08-31  |  1KB  |  61 lines

  1. #include "syshdrs.h"
  2. #ifdef PRAGMA_HDRSTOP
  3. #    pragma hdrstop
  4. #endif
  5.  
  6. int
  7. UBind(int sockfd, const char *const astr, const int nTries, const int reuseFlag)
  8. {
  9.     unsigned int i;
  10.     int on;
  11.     sockopt_size_t onsize;
  12.     struct sockaddr_un localAddr;
  13.     sockaddr_size_t ualen;
  14.     
  15.     if ((astr == NULL) || (astr[0] == '\0'))  {
  16.         errno = EINVAL;
  17.         return (-1);
  18.     }
  19.  
  20.     ualen = (sockaddr_size_t) MakeSockAddrUn(&localAddr, astr);
  21.     (void) unlink(localAddr.sun_path);
  22.  
  23.     if (reuseFlag != kReUseAddrNo) {
  24.         /* This is mostly so you can quit the server and re-run it
  25.          * again right away.  If you don't do this, the OS may complain
  26.          * that the address is still in use.
  27.          */
  28.         on = 1;
  29.         onsize = (sockopt_size_t) sizeof(on);
  30.         (void) setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
  31.             &on, onsize);
  32.     }
  33.  
  34.     for (i=1; ; i++) {
  35.         /* Try binding a few times, in case we get Address in Use
  36.          * errors.
  37.          */
  38.         if (bind(sockfd, (struct sockaddr *) &localAddr, ualen) == 0) {
  39.             break;
  40.         }
  41.         if (i == (unsigned int) nTries) {
  42.             return (-1);
  43.         }
  44.         /* Give the OS time to clean up the old socket,
  45.          * and then try again.
  46.          */
  47.         sleep(i * 3);
  48.     }
  49.  
  50.     return (0);
  51. }    /* UBind */
  52.  
  53.  
  54.  
  55.  
  56. int
  57. UListen(int sfd, int backlog)
  58. {
  59.     return (listen(sfd, (listen_backlog_t) backlog));
  60. }    /* UListen */
  61.