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 / UBind.c < prev    next >
C/C++ Source or Header  |  2001-11-19  |  1KB  |  56 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.     ualen = (sockaddr_size_t) MakeSockAddrUn(&localAddr, astr);
  16.     (void) unlink(localAddr.sun_path);
  17.  
  18.     if (reuseFlag != kReUseAddrNo) {
  19.         /* This is mostly so you can quit the server and re-run it
  20.          * again right away.  If you don't do this, the OS may complain
  21.          * that the address is still in use.
  22.          */
  23.         on = 1;
  24.         onsize = (sockopt_size_t) sizeof(on);
  25.         (void) setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
  26.             &on, onsize);
  27.     }
  28.  
  29.     for (i=1; ; i++) {
  30.         /* Try binding a few times, in case we get Address in Use
  31.          * errors.
  32.          */
  33.         if (bind(sockfd, (struct sockaddr *) &localAddr, ualen) == 0) {
  34.             break;
  35.         }
  36.         if (i == (unsigned int) nTries) {
  37.             return (-1);
  38.         }
  39.         /* Give the OS time to clean up the old socket,
  40.          * and then try again.
  41.          */
  42.         sleep(i * 3);
  43.     }
  44.  
  45.     return (0);
  46. }    /* UBind */
  47.  
  48.  
  49.  
  50.  
  51. int
  52. UListen(int sfd, int backlog)
  53. {
  54.     return (listen(sfd, (listen_backlog_t) backlog));
  55. }    /* UListen */
  56.